一直对C++的复制(Copy)、赋值(Assign)操作比较困惑,现在看书的时候看到了,就把它顺便记下来。
一、什么时候触发
一下代码可以熟悉什么时候触发复制操作,以及什么时候触发赋值操作:
// testCopy.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include using namespace std;class testCopy{public: testCopy():a(0) { cout<<"enter constructor"<
输出结果如下:
t1enter constructort2enter copy constructort3enter constructorenter operator=f1enter copy constructorenter f1enter destructorf2enter constructorenter f2enter constructorenter copy constructorenter destructorenter operator=enter destructorendenter destructorenter destructorenter destructorenter destructor
二、复制、赋值、析构函数重写的必要性
上面的例子不足以说明重写复制、赋值、析构的重要性,当类中需要动态分配内存时,重要性就体现出来了:
class testCopy2{public: testCopy2():buf(new char[128]) { cout<<"enter constructor"<
三、一些规则
1. 如果一个类需要一个析构函数,那么它一定需要重载复制和赋值操作。
2. 如果一个类需要重载复制操作,那么它一定需要重载赋值操作,反之同成立。
3. 如果一个类需要重载复制和赋值操作,但是不一定需要重载析构操作。