APIを変更できないため、ここでshared_ptrを使用する必要があります。
Foo1 *foo1 = new Foo1(...);
shared_ptr<Foo2> foo2(foo1);
ここでshared_ptrは、foo1によって使用されるメモリの解放を処理しますか?私が正しく理解していれば、foo1でdeleteを呼び出す必要はありませんか?
APIを変更できないため、ここでshared_ptrを使用する必要があります。
Foo1 *foo1 = new Foo1(...);
shared_ptr<Foo2> foo2(foo1);
ここでshared_ptrは、foo1によって使用されるメモリの解放を処理しますか?私が正しく理解していれば、foo1でdeleteを呼び出す必要はありませんか?
はい。あなたは正しいですが、初期化する正しい方法foo2
は次のとおりです。
std::shared_ptr<Foo2> foo2 = std::make_shared<Foo1>();
std::make_shared<>()
ハーブサッターは、ここ
で使用する必要がある理由について説明しています: https ://herbsutter.com/2013/05/29/gotw-89-solution-smart-pointers/
foo1でdeleteを呼び出さないでください。
foo1を作成しない方がよいでしょう。foo2のみ:
shared_ptr<Foo2> foo2(new Foo1(...));
std :: shared_ptrは、ポインターを介してオブジェクトの共有所有権を保持するスマートポインターです。
このポインタを共有する必要がない場合は、使用を検討してくださいstd::unique_ptr
std :: unique_ptrは、次のようなスマートポインターです。ポインターを介してオブジェクトの唯一の所有権を保持し、unique_ptrがスコープ外になると、ポイントされたオブジェクトを破棄します。
正しい。スマートポインタは所有権のセマンティクスを提供します。特に、によって提供されるセマンティクスは、オブジェクトを最後に指しているオブジェクトが破棄std::shared_ptr
されると、オブジェクトが削除されるというものです。参照カウント(オブジェクトを参照しているsの数)を保持し、0に達すると、オブジェクトを削除します。shared_ptr
shared_ptr
shared_ptr