私は、このクラスがそれに仕事をするだろうと思いますが、私はこれで合計完璧に到達するためにどのような方法を見つけることだ。この二つのクラスC++、正しくコピーする方法std :: vector <Class *>コピーコンストラクタで?
// This is generic data structure containing some binary data
class A {
public:
A();
A(const A&);
~A();
}
// Main data container
class B {
public:
B();
B(const B&);
~B();
protected:
std::vector<A *> data;
}
// Copy constructor for class b
B::B(const B& orig):data() {
for(std::vector<A *>::const_iterator it = orig.data.begin();
it < orig.data.end(); ++it){
data.push_back(new A(*(*it)));
}
}
を使用しています。最初:data()
で
- この初期化が正しく空のベクターを初期化するのに必要な(そしてそれが良いとクリーンなコードを書くの一部ですか)?
コピーコンストラクタでvector::iterator
を使用する方法は、私が見つけた唯一の方法は、コードに書き込んだものです(constはコピーコンストラクタに必須です)。
コピーだけベクトルは単なるポインタ値と全体ではなく、オブジェクトをコピーするのでしょうか?
最後に、新しいデータの初期化...ループ全体を小さなコードで置き換える方法はありますか?オブジェクトのポインタを含むstd :: containersのコピーコンストラクタを書く方法はありますか??
サブ質問:私は(、パワーは()...オブジェクトをコピーするかどうかを決定するたびにコピーしない)vector<A *>
がはるかに適切かつ効果的なだけでvector<A>
より様々な理由で使用したと仮定してい
「サブ質問:ポインタのベクトルを使用していると仮定していますか?" –
イニシャライザのリストに' data'をあらかじめ割り当てておいてください。そういうふうにpush_back()を使うのは非常に効果がありません – lapk
副答え:ポインタを使わないと使えないのですか? – Lol4t0