C++复制构造函数以及赋值操作符
当定义一个新类型的时候,需要显式或隐式地指定复制、赋值和撤销该类型的对象时会发生什么——这是通过定义特殊成员:复制构造函数、赋值操作符和析构函数来达到的。如果没有显式定义复制构造函数或者赋值操作符,编译器(通常)会为我们定义。 看看编译器默认的构造函数和赋值操作符做了些什么工作: class_a.h #ifndef _CLASS_A_H #define _CLASS_A_H class A { public: A(); A(int a); private: int a; }; #endif class_a.cpp #include "class_a.h" A::A(): a(0) { } A::A(int a) { this->a = a; } main.cpp #include "class_a.h" int main() { A obj1; //调用无形参构造函数 A obj2(2); //形参为int的构造函数 A obj3(obj1); //默认复制构造函数 A obj4 = 3; //调用形参为int的构造函数产生类A的临时变量,调用默认赋值操作符进行赋值 A obj5 = obj1; //调用默认赋值操作符 return 0; } 编译执行g++ -g main.cpp class_a.cpp 反汇编objdump -S a.out 可知: