У меня возникли проблемы с пониманием использования интеллектуальных указателей как членов класса в С++ 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...
}
Это путь? Большое спасибо!