1
struct Obj
{
    Obj(P *p, int i): m_p(p), m_info(info) {}
    std::auto_ptr<P> m_p;
    int m_info;
};

std::vector<Obj> objects; // error C2558: struct 'Obj' : no copy constructor available...

ここでの問題はauto_ptr、私が推測するところにあります。コンテナに押し込むのは悪いことだということは誰もが知っていますし、コンテナauto_ptrを持っauto_ptrている人を押し込むのも悪いことです。フィールドがなかっm_infoたら、boost::ptr_vector<P> objects

どのようにそれを整理することを提案しますか?

4

2 に答える 2

0

あなたのクラスObjがpの所有権を取得することになっていると思います。なぜ、RAIIで通常のポインターを使用するのですか(Obj(P * p、int i)でm_pを割り当て、〜Obj()で削除します)?

または、 http: //www.boost.org/doc/libs/1_36_0/libs/smart_ptr/scoped_ptr.htmのようなScopedPointerクラスを簡単に作成できます。

于 2012-11-23T12:20:03.173 に答える
0

生のポインターを自分で管理するか(コンストラクターで割り当て、デストラクタで割り当てを解除し、コピーセマンティクスを実装します-RAIIに準拠)、ポインターのタイプをstd::auto_ptrからstd::shared_ptr / boost ::shared_ptr/何か他のものに変更できます。 。

于 2012-11-23T12:38:29.877 に答える