当我对具有复制构造函数但没有赋值运算符的对象进行赋值时会发生什么? 它会调用编译器的赋值运算符,执行成员复制吗?
答案 0 :(得分:2)
所有类都有一个赋值运算符,除非你明确删除它(在C ++ 11之前不可能)。如果您不提供自己的实现,编译器将为您提供一个。
这是rule of three背后的主要原因:如果你有一个复制构造函数,几乎可以肯定你还需要一个赋值运算符和一个析构函数。
答案 1 :(得分:1)
答案 2 :(得分:1)
复制构造函数在赋值中不起作用,将调用默认赋值运算符,它将对class
类型的对象成员执行内置类型成员和调用赋值运算符的逐位复制。
答案 3 :(得分:0)
我不知道赋值是什么意思(在编译器的上下文中)。所以,让我试试一个例子。让我们说我们有一个类测试;
Test a,c; //default constructor would be called for both.
Test b = a; //copy constructor would be called for b as we are creating that object.
c = b; //assignment operator would be called for c as we are changing content's of c.
因此,如果类Test包含普通对象,那么如果你定义OR就没关系,编译器不会为你做逐位复制。但是如果你的类包含指针,那么你应该明确定义你的拷贝构造函数,赋值运算符和析构函数。
希望我足够清楚。