我刚刚听完了Scott Meyers关于C++ 0x的软件工程电台播客采访.大多数新功能对我来说都很有意义,我现在对C++ 0x感到兴奋,除了一个.我仍然没有得到移动语义 ......它们究竟是什么?
我有这个问题,有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
}
Run Code Online (Sandbox Code Playgroud)
而AFAIK vec将调用ClassAcopy-ctor来制作新创建的对象的副本a,这就是问题所在.如果我ClassA按照通常的方式定义副本,
ClassA::ClassA(const ClassA &ra) : _ptr(0)
{
_ptr = ra._ptr;
}
Run Code Online (Sandbox Code Playgroud)
然后对象a及其副本(由vec创建)将_ptr指向同一区域的指针,当foo完成时,a将调用析构函数释放_ptr,然后a复制vec将是一个悬空指针,对吧?由于这个问题,我想以ClassA这种方式实现copy-ctor,
ClassA::ClassA(ClassA &ra) : _ptr(0) //take non-const …Run Code Online (Sandbox Code Playgroud)