何时调用复制分配运算符
When is the copy assignment operator called?
当我读到复制构造函数和复制赋值构造函数时,我所理解的是,它们都将各自的属性一个交给另一个,并且它们都是由编译器隐式声明的(如果没有定义的话)。所以两者都必须存在,无论是否做了有用的事情。
然后我测试了这个代码:
#include <iostream>
using namespace std;
class Test {
public:
Test () {
cout << "Default constructor" << endl;
}
Test (const Test& empty) {
cout << "Copy constructor" << endl;
}
Test& operator=(const Test& empty) {
cout << "Copy assignment operator" << endl;
}
private:
};
int main () {
Test a; // Test default constructor
Test b (a); // Test copy constructor
Test c = b; // Test copy assignment constructor
system ("pause");
return 0;
}
但似乎根本没有调用复制分配运算符。我尝试了三个条件:
一切都包括在内。打印出来:
// Default constructor // Copy constructor // Copy constructor # Why not prints out "Copy assignment operator"?
Whitout复制赋值运算符只复制构造函数。打印出来:
// Default constructor // Copy constructor // Copy constructor # Why it's printed out even though I didn't define it?
Whitout复制构造函数只复制赋值运算符。打印出来:
// Default constructor # Why "Copy assignment operator" is not printed out?
仅构造函数。打印出来:
// Default constructor # Understandable
所以,编译器甚至不在乎我是否定义了复制赋值运算符。上面的四个例子都没有打印出"Copy assignment operator"。那么,如果它真的存在并有意义,它是什么时候被调用的呢?
Test c = b
是初始化,而不是赋值。
如果你这样做了:
Test c;
c = b;
然后它会调用复制赋值操作符。
相关文章:
- 正在尝试重载二进制搜索树分配运算符
- 自定义先决条件对移动分配运算符有效吗
- 分配给转换运算符失败-C++
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- C++ - 没有自定义交换功能的移动分配运算符?
- 如何增加以前由新运算符分配的 C++ std::list 数组的大小?
- 为什么在通过引用返回运算符分配时取消引用'this'指针?
- 使用 'new[]' 运算符分配内存
- 操作后通过运算符分配对象
- 新运算符分配的大小大于声明的大小.为什么
- 如何控制运算符 [] 分配的值
- 字符** 使用 new 运算符分配内存
- 新的运算符分配函数顺序连续性和初始值
- 如何释放使用 C++ "new" 运算符分配的 C 中的内存
- 只能使用CUDA中的新运算符分配有限的内存
- 使用友元运算符分配和私有变量是不可访问的
- 释放由赋值运算符C++分配的内存
- 确定C++中新运算符分配的内存大小
- 用于新运算符分配的公共内存
- 如何在C++中检索由新运算符分配的对象的地址