3

了解しました。これで数か月間、私は困惑しました。他の誰かがこれを手伝ってくれるかどうかを確認します。

したがって、私のメインプログラムには、同じ基本クラス(physical_t)から派生した2種類の構造体(solarBody_t、ship_t)があります。solarBodyと船を同じベクトルに入れることができないため、両方のオブジェクトのベクトルを作成します。それらは両方ともダムポインタベクトルです。
boost :: shared_ptrsのベクトルを使用して、両方を同じベクトルに入れてみました。さて、私の理解では、shared_ptrsはダムポインタと同じセマンティクスと構文を持つ必要があります(たとえば、foobar-> mass = 42;両方で機能するはずです)。ただし、宣言をboost :: shared_ptrのベクトルに変更してダムポインターに変更するだけで、shared_ptrsのベクトルに何かをプッシュバックしようとするとエラーが発生します。

私の知る限り、これはうまくいくはずです。ブーストドキュメントは、の例を示しています

boost::shared_ptr<int> p(new int(2));

これは私がやっていることとほぼ同じです。

誰かがこれを以前に経験したことがありますか?または、すべてをベクトルに格納する別の方法を提案したいですか?

詳細については、ここにその要点があります(用語の矛盾のようなものですが、私はしゃれを作ったので、そこにあります)。

4

2 に答える 2

3

shared_ptr裸のポインターから自動的に a を構築できるとは思いません。は、むき出しpush_backの ではなく、 を期待しています。次のようなものを見て、試してみてください。shared_ptr<foobar_t>foobar_tboost::make_shared

entity_smart.push_back(boost::make_shared<foobar_t>(42));

make_sharedにはいくつかの利点があります。つまり、ポインター制御ブロックとオブジェクト自体を 1 回の割り当てで割り当て、newコードから一致しないものを保持します。またshared_ptr、オブジェクトへの を作成していることを明示的に明確にします。

それ以外は、はい、セマンティクスは基本的に同じでなければなりません。shared_ptrただし、実際にオブジェクトの所有権を共有する必要がない場合は、やり過ぎかもしれないことに注意してください。

于 2012-06-06T01:45:08.847 に答える