4

私は持っています:

boost::shared_ptr<Car> sptr;

ここで、他のオブジェクトからアドレスを割り当てたいと思います:

Car object;
sptr = &object;//error

コメントでわかるように、エラーがあります。私の質問は、あるオブジェクトから shared_ptr にアドレスを割り当てるにはどうすればよいですか? 通常のポインターの場合は、次のようになります。

Car *ptr;
Car object;
ptr = &object;//ok

この場合、boost::shared_ptr をどのように使用しますか? ありがとう

4

2 に答える 2

6

ポインターを明示的にに変換することで、割り当てを機能させることができboost::shared_ptr<Car>ます。

boost::shared_ptr<Car> sptr;
Car object;
sptr = boost::shared_ptr<Car>(&object);

ただし、それは非常に悪い考えです。

  1. の最後のコピーがsptr範囲外にCarなると、deletedになりますが、 newed にはなりませんでした。適切な削除ツール (つまり、何もしないもの) を使用することでこの問題を回避できるかもしれませんが、これは実際には役に立ちません:
  2. objectスタック上に存在するため、 の最後のコピーがスコープ外になったときではなく、スコープ外になったときに破棄されますsptr

共有ポインターを持つヒープ上のオブジェクトのみを管理する必要があります。スタックに割り当てられたオブジェクトと他のオブジェクトに埋め込まれたオブジェクトには、独自のライフタイム管理があります。

于 2013-09-30T22:18:02.173 に答える