关于The big three:
1. 析构函数
2.拷贝构造函数
3.operator= (拷贝赋值运算符)
根据《C++ prime》第五版 7.15『拷贝,赋值和析构』的描述
对象会在几种情况下会被拷贝:
1.初始化变量
2.以值的方式传递或返回一个对象
3.返回一个对象
一般来说,我们要避免拷贝一个比较大的类型,所以常常会返回引用,通过引用来访问该对象。
对象会在使用赋值操作符(=),发生对象赋值操作。
对象会在几种情况调用析构函数:
1.对象被销毁,其成员也被销毁
2.vector对象销毁时存储在其中的对象会被销毁
3.变量离开其作用域
4.临时对象,当创建它的完整表达式结束时被销毁
The big three 就算我们没有去定义,编译器也会自动帮我们定义。但是如果类要分配对象以外的资源,像是分配动态内存的时候,编译器有可能不能正常工作,所以我们设定带有指针的类时,要自己定义这三个行为。
一般来说,我们要同时定义这三个函数。最好先从确定是否要定义析构函数,因为析构函数比较容易看出来,当我们肯定需要析构函数的时候,也就确定了还要定义拷贝函数和拷贝赋值运算符。
网友评论