これは適切な方法ですか?
void helperFunc(MyClass *ptr)
{
// do something with ptr,
}
unique_ptr<MyClass> p(new MyClass());
helperFunc(p.get());
または、そのような操作に shared_ptr を使用する必要がありますか?
これは適切な方法ですか?
void helperFunc(MyClass *ptr)
{
// do something with ptr,
}
unique_ptr<MyClass> p(new MyClass());
helperFunc(p.get());
または、そのような操作に shared_ptr を使用する必要がありますか?
メモリの所有権を取得したい場合を除き (その場合は ashared_ptr
または aを渡す必要がunique_ptr
あります)、なぜポインターを使用するのでしょうか?
参照渡し。
void helperFunc(MyClass& obj)
{
// do something with ptr,
}
unique_ptr<MyClass> p(new MyClass());
helperFunc(*p);
所有権を取得したくない場合に生のポインターを使用することは、一般的には問題ありませんが、明示的にnullptr
s を許可したい場合を除き、ここでは不要です (その場合は、生のポインターを使用します)。
helpFunc が所有権を取得する場合は、 std::shared_ptr または std::unique_ptr を渡します。それ以外の場合は、参照によって渡します。
void helperFunc(MyClass& my_class)
{
}
電話:
helperFunc(*p);
関数を使用するget()
と、生のポインターが取得され、unique_ptr
クラスを使用して最初に持っていた割り当て追跡が失われます。
ポインターの所有権を取得しないほど些細なことであり、ポインターをリークしたり、ダングリング参照を他の状態に残したりしないことが保証されないget()
限り、私は使用を避けます。helperFunc
本当にunique_ptr
それ自体を関数に渡すつもりなら、次を見てください:コンストラクターまたは関数に unique_ptr 引数を渡すにはどうすればよいですか?