0

現在のプロジェクトでを使用しようとしてboost::ptr_vectorいますが、push_back() メソッドでパラメーター化されたコンストラクターを使用できるかどうか、またはデフォルトのコンストラクターを使用する必要があるかどうか疑問に思っていましたか?

二次的な質問として、定義した場合でもデフォルトのコンストラクターを使用しますか?


これは最良のフォローアップではないかもしれませんが、私が見た実装のほとんどは、メソッドが演算子を取るboost::ptr_vectorことを示しています。オブジェクトを作成し、そのオブジェクトへのポインタをコンテナのメソッドに渡すことはできますか?push_back()newpush_back()

4

1 に答える 1

2

ptr_vectorまたはptr_container標準的なベクターまたはコンテナーによく似たものを使用する目的で。コンストラクターが定義されている限り、任意のコンストラクターを使用することができます (デフォルトも機能します)。唯一の本当の違いは、 aptr_containerが静的オブジェクトの代わりにポインターを取り、浅いコピーに並置された深いコピーとして機能するクローン作成をサポートすることです。

フォローアップについて。既存のオブジェクトをpush_back()メソッドに使用することが可能です:

#include <boost/ptr_container/ptr_vector.hpp>
#include <vector>
typedef boost::ptr_vector<Base> thing;
void foo(void){
    thing Bar;
    Object * newObj = new Object(param1, param2);
    bar.push_back(newObj);
}

オブジェクトのポインターに格納されている情報を使用して、配列に配置しようとしているように見えます。その場合、静的オブジェクトを与えることができます。なんらかの理由で静的オブジェクトを与えることを考えると、これは私に奇妙な感じを与えます(ポインターコンテナーの行に沿ったものは、実際には一意のアイテム/ポインターにのみ使用する必要があります)。

于 2012-04-25T07:56:23.927 に答える