私はこの問題を抱えています、次のような機能がありfoo()
ます、
vector<ClassA> vec;
void foo()
{
ClassA a; //inside foo, a ClassA object will be created
a._ptr = new char[10];
vec.push_back(a); //and this newly created ClassA object should be put into vec for later use
}
そして、AFAIKは、のcopy- ctorvec
を呼び出して、新しく作成されたオブジェクトのコピーを作成しますが、ここに問題があります。の copy-ctor を通常の方法で定義すると、ClassA
a
ClassA
ClassA::ClassA(const ClassA &ra) : _ptr(0)
{
_ptr = ra._ptr;
}
オブジェクトa
とそのコピー (vec によって作成されたもの) は_ptr
同じ領域を指すポインターを持ち、foo
終了a
するとデストラクタを呼び出して解放_ptr
し、a
のコピーはvec
ダングリング ポインターになりますよね? この問題のため、ClassA
このように の copy-ctor を実装したいのですが、
ClassA::ClassA(ClassA &ra) : _ptr(0) //take non-const reference as parameter
{
std::swap(_ptr, a._ptr);
}
私の実装は大丈夫ですか?または、仕事を達成するのに役立つ他の方法はありますか?