在 C + + 11中,我很难理解智能指针作为类成员的用法。我读了很多关于智能指针的文章,我认为我理解 unique_ptr
和 shared_ptr
/weak_ptr
是如何工作的。我不明白的是真正的用法。似乎每个人都建议使用 unique_ptr
作为方法去几乎所有的时间。但是我该如何实现这样的东西:
class Device {
};
class Settings {
Device *device;
public:
Settings(Device *device) {
this->device = device;
}
Device *getDevice() {
return device;
}
};
int main() {
Device *device = new Device();
Settings settings(device);
// ...
Device *myDevice = settings.getDevice();
// do something with myDevice...
}
假设我想用智能指针替换指针。因为 getDevice()
,unique_ptr
不会工作,对吗?这就是我使用 shared_ptr
和 weak_ptr
的时间?无法使用 unique_ptr
?在我看来,大多数情况下 shared_ptr
更有意义,除非我在一个非常小的范围内使用指针?
class Device {
};
class Settings {
std::shared_ptr<Device> device;
public:
Settings(std::shared_ptr<Device> device) {
this->device = device;
}
std::weak_ptr<Device> getDevice() {
return device;
}
};
int main() {
std::shared_ptr<Device> device(new Device());
Settings settings(device);
// ...
std::weak_ptr<Device> myDevice = settings.getDevice();
// do something with myDevice...
}
是这样吗? 非常感谢!