我有这个问题,有一个功能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
}
并且 AFAIKvec将调用ClassA的 copy-ctor 来制作新创建的 object 的副本,a这就是问题所在。如果我ClassA以通常的方式定义 's copy-ctor,
ClassA::ClassA(const ClassA &ra) : _ptr(0)
{
_ptr = ra._ptr;
}
那么 objecta及其副本(由 vec 创建)将具有_ptr指向同一区域的指针,当foo完成时,a将调用析构函数来 release _ptr,然后a' 的副本vec将是一个悬空指针,对吗?由于这个问题,我想以ClassA这种方式实现 's copy-ctor,
ClassA::ClassA(ClassA &ra) : _ptr(0) //take non-const reference as parameter
{
std::swap(_ptr, a._ptr);
}
我的实施好吗?或者任何其他方式可以帮助完成这项工作?