我无法理解智能指针在 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...
}
假设我想用智能指针替换指针。Aunique_ptr
不会工作,因为getDevice()
,对吧?那是我使用shared_ptr
and的时候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...
}
这是要走的路吗?非常感谢!