2011-01-21 10 views
6

scoped_ptrやshared_ptrなどのsmart_ptrをstd :: mapなどのstdコンテナで使用することはできますか?boost :: smart_ptrを標準コンテナで使用できますか?

class SomeClass 
{ 
    std::map<int,boost::scoped_ptr<SomeOtherClass> > a_map; 
}; 

boost::smart_ptr can be used for polymorphismこの場合も同様ですか?コンテナが破壊されると、サブクラスが正しく破棄されますか?

+0

前と同じこと:試しましたか? – BatchyX

+0

@BatchyX - nope。私の場合はかなりリファクタリングが多いので、私はむしろ尋ねます。また、答えがStackOverflowにない場合は、それは:)# – Jonathan

+0

そこに行って、それを行ってください。しかし、私はそれから学んだことがあります。ほとんどの場合、5分以内にアイデアを検証/無効化する20〜30行のテストプログラムを書くことができます。 'struct test {〜test(){std :: cout <<" test "<< std :: endl; }}; int main(){vector > v; v.push_back(make_shared ()); } '(またはこの行の中では、コメントにコードを書くのが難しい)。次に、デストラクタが呼び出されたかどうかをコンパイルして検証します。 'scoped_ptr'で再度試して、コードがコンパイルされているかどうかを確認してください。いくつかの操作( 'resize'、...)を投げて確認してください。 –

答えて

20

scoped_ptrはコピーできないため(コンテナのインターフェイスで必要)、標準コンテナでは使用できません。しかしながら、shared_ptrを使用してもよい。

C++ 11を使用できず、すでにブーストを使用している場合は、pointer containersを共有ポインタのコンテナよりも多少優れたパフォーマンスを発揮すると考えてください。

C++ 11を使用している場合は、unique_ptrのコンテナを使用してください。これは、ブーストのポインタコンテナと同様に機能するはずです。

+0

@ジョンディブリング:勝利?以来、私たちは競争していますか? :) –

関連する問題