【发布时间】:2012-07-27 08:13:19
【问题描述】:
我有这个问题,有一个函数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,vec 将调用 ClassA 的 copy-ctor 来复制新创建的对象 a,这就是问题所在。如果我以通常的方式定义ClassA的copy-ctor,
ClassA::ClassA(const ClassA &ra) : _ptr(0)
{
_ptr = ra._ptr;
}
然后对象a及其副本(由vec创建)将有指针_ptr指向同一区域,当foo完成时,a将调用析构函数释放_ptr,然后@987654333 @ 在vec 中的副本将是一个悬空指针,对吧?由于这个问题,我想这样实现ClassA的copy-ctor,
ClassA::ClassA(ClassA &ra) : _ptr(0) //take non-const reference as parameter
{
std::swap(_ptr, a._ptr);
}
我的实现好吗?或者任何其他方式可以帮助完成这项工作?
【问题讨论】:
-
请不要重新发明
std::****_ptr;) -
为什么需要存储指向
char的指针?不使用std::string或vector<char>会避免问题吗?
标签: c++