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
そして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...
}
それは行く方法ですか?どうもありがとう!