私はオブジェクトのベクトルを持っています。各オブジェクトには、コピー不可オブジェクト(boost::signal
)へのboost::shared_ptr
があります。オブジェクトのデフォルトコンストラクタはboost :: signalオブジェクトを作成します。 X個々のオブジェクトを含むように私のベクトルを設定するには一意のオブジェクトを持つstd :: vectorのサイズを変更するには
struct FuncRef
{
typedef boost::signal0<void, > Func;
boost::shared_ptr <Func> function;
FuncRef():
function(new Func)
{
}
};
、私はこれでした: - それは一つのオブジェクトを作るために、既定のコンストラクタを使用していますので、これは、私が期待したものやらなかった
vec.resize(X);
をし、複製コンストラクタを使用して複製を作成します。私はXオブジェクトになりますが、それらはすべて同じboost::signal0
オブジェクトを指しています。
for
ループでpush_back
を使用するよりも簡単に正しいベクターを構築する方法はありますか?
コンパイル時にこのようなエラーを検出するには、クラスに 'boost :: noncopyable'を継承させることができます。 –
@Bjorn - クラスはベクター内にあるので、コピー可能でなければなりません。だから私はshared_ptrを使う必要があります。問題は、それが私にそれを期待していないときにコピーを使用しているということです... – Roddy
正直、私は何を考えていましたか? –