我有这个问题,有一个功能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);
}
我的实施好吗?或者任何其他方式可以帮助完成这项工作?