c++中拷贝构造函数与“=”操做符重载

一.首先,若是不对一个类定义其拷贝构造函数和操做符重载的话,c++会提供两个默认的函数。功能就是内存拷贝。在常见的应用中,这种机制就可以实现咱们想要的拷贝了,可是当类包含动态分配内存的成员时,就会出现问题,这个时候,这种默认的拷贝构造和默认的“=”重载都只是实现浅层拷贝,以指针为例,它们只是拷贝指针的内容,而拷贝后,只是指向了同一块内存而已。这种时候,咱们便须要重写拷贝构造函数和“=”重载。c++

二.解决了第一个问题以后,第二个问题是,什么状况下会调用拷贝构造函数,什么状况下又是调用的“=”重载呢?函数

特此作了一组实验。分状况讨论之。假定已经定义了类Test。指针

1.Test t1, t2(t1); 这种状况很显然,显式地调用了拷贝构造函数。内存

2.Test t1;  Test t2;   t2 = t1; 这种状况也不难判断,显式地调用了“=”重载。构造函数

3.Test t1; Test t2 = t1;  这种状况有些人会觉得是赋值,因此理所固然的觉得调用的是"="重载函数,实际上是错误的,这种状况调用的实际上是拷贝构造函数。咱们须要明确这是在初始化,不是在赋值。错误

4.函数的参数和返回值。 这种状况调用的也是拷贝构造函数。参数

相关文章
相关标签/搜索