У меня возникли проблемы с пониманием использования интеллектуальных указателей как членов класса в С++ 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...
}
Скажем, я хотел бы заменить указатели на интеллектуальные указатели. A unique_ptr
не работает из-за getDevice()
, правильно? Так что, когда я использую 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...
}
Это путь? Большое спасибо!