当用同类型的对象去构造新对象时,会调用Copy Constructor 如果没写,编译器会自动生成默认拷贝构造函数
The Copy Constructor
注:拷贝的时候,参数必须是引用
注:如果class
中有指针的时候,会把地址原封不动拷贝一份,导致两个对象的指针最后指向同一个东西 所以,如果class
中有指针,那么要自己写拷贝构造函数、析构函数和拷贝赋值操作
拷贝构造发生的时间:
- 初始化的时候
- 按值调用的时候
- 返回值:返回某一个对象,然后用另一个对象接这个返回值的时候
vector中效率问题:
- 如果预先知道大小,可以先用
.reserve(size)
指定大小,避免频繁扩容导致的频繁拷贝开销;
- 可以用
.emplace(args)
的方式,这样里面直接放对象的参数,会直接在vector
内部构造;可以避免在外部构造后copy的性能开销
Copy 禁用
如果不希望对象能被拷贝:
可能需要禁用拷贝构造的地方:如智能指针;