4

これは適切な方法ですか?

void helperFunc(MyClass *ptr)
{
    // do something with ptr,
}

unique_ptr<MyClass> p(new MyClass());
helperFunc(p.get());

または、そのような操作に shared_ptr を使用する必要がありますか?

4

3 に答える 3

7

メモリの所有権を取得したい場合を除き (その場合は ashared_ptrまたは aを渡す必要がunique_ptrあります)、なぜポインターを使用するのでしょうか?

参照渡し。

void helperFunc(MyClass& obj)
{
    // do something with ptr,
}

unique_ptr<MyClass> p(new MyClass());
helperFunc(*p);

所有権を取得したくない場合に生のポインターを使用することは、一般的には問題ありませんが、明示的にnullptrs を許可したい場合を除き、ここでは不要です (その場合は、生のポインターを使用します)。

于 2013-02-01T11:01:00.987 に答える
5

helpFunc が所有権を取得する場合は、 std::shared_ptr または std::unique_ptr を渡します。それ以外の場合は、参照によって渡します。

  void helperFunc(MyClass& my_class)
  {
  }

電話:

 helperFunc(*p);
于 2013-02-01T10:34:36.053 に答える
4

関数を使用するget()と、生のポインターが取得され、unique_ptrクラスを使用して最初に持っていた割り当て追跡が失われます。

ポインターの所有権を取得しないほど些細なことであり、ポインターをリークしたり、ダングリング参照を他の状態に残したりしないことが保証されないget()限り、私は使用を避けます。helperFunc

本当にunique_ptrそれ自体を関数に渡すつもりなら、次を見てください:コンストラクターまたは関数に unique_ptr 引数を渡すにはどうすればよいですか?

于 2013-02-01T10:35:50.210 に答える