私はクラス型 "xx"を含むstlベクトルを持っているとしましょう。 xxは抽象です。私はコピーコンストラクタが呼び出されなければならないためであると仮定しstl vector.push_back()抽象クラスがコンパイルされない
std::vector<xx> victor;
void pusher(xx& thing)
{
victor.push_back(thing);
}
void main()
{
;
}
:私は、コンパイラが、私は、次のような何かをするとき、私は「インスタンス化」させません問題に遭遇してきました。私は、xxの代わりにxx *をベクトルに格納することで、この問題を回避してきました。より良い解決策はありますか?それは何ですか?
しかし、* std :: auto_ptrは使用しません。それらは、奇妙なコピーセマンティクスのためにSTLコンテナに入れることはできません。 –
あなたはまたboostのptr_vectorを使うことができます - http://www.boost.org/doc/libs/1_39_0/libs/ptr_container/doc/ptr_container.html – bdonlan
stlベクトルを使うときはxxの状態をコピーしていますそれを取得すると、C++は最初にxxをインスタンス化し、次に適切なプロパティでそれを埋めます。単に古いオブジェクトを指すのとは対照的です。ですから、問題はxxのコンストラクタを使用することですか? – Ori