【发布时间】:2017-11-18 07:33:24
【问题描述】:
我正在尝试实现复制和移动分配,但我不明白应该如何使用它们。我已阅读以下主题
When did copy assignment operator called?
但它对我不起作用。
类:
class Directory{
string name;
public:
Directory(string name):name(name) {
}
~Directory() {
cout << "Deleting was called" <<endl;
}
Directory& operator=(Directory& other){
cout << "cp assigment" <<endl;
return *this;
}
Directory& operator=(Directory&& other){
cout << "move assigment" <<endl;
return *this;
}
};
主要
int main()
{
Directory* dir = new Directory("alex");
Directory* dir2;
dir = dir2;
cout<<"done"<<endl;
};
我想知道何时调用复制分配和移动分配。提前致谢。
【问题讨论】:
-
在您的情况下,分配是针对指针 (
Directory*) 完成的。删除*s 和new即可。 -
您正在使用指针,您希望如何调用副本??
-
dir = dir2;调用内置指针复制赋值运算符,而不是您的类复制赋值运算符。 -
顺便说一句。
dir2未初始化。因此,在dir = dir2;之后,dir具有相同的值并且指向newed 实例的指针丢失。这是内存泄漏。 -
删除函数的使用:你必须定义一个拷贝构造函数。我总是不太确定复制构造函数何时不是自动定义的。但实际上最好关注rule of 5。 (因此,我不知道,因为我不需要知道。)
标签: c++ copy-assignment move-assignment-operator