首页 > 代码库 > 构造函数

构造函数

拷贝构造函数被调用的时机:

1. 当用类的一个对象去初始化该类的另一个对象(或引用)时系统自动调用拷贝构造函数实现拷贝赋值。

2. 若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数。

3. 当函数的返回值是类对象时,系统自动调用拷贝构造函数。

 

 

需要注意的是,赋值并不会调用复制构造函数,赋值只是赋值运算符(重载)在起作用

 

p = q; //此时没有复制构造函数的调用!

简单来记的话就是,如果对象在声明的同时将另一个已存在的对象赋给它,就会调用复制构造函数;如果对象已经存在,然后将另一个已存在的对象赋给它,调用的就是赋值运算符(重载)

 

默认的复制构造函数和赋值运算符进行的都是"shallow copy",只是简单地复制字段,因此如果对象中含有动态分配的内存,就需要我们自己重写复制构造函数或者重载赋值运算符来实现"deep copy",确保数据的完整性和安全性。

int main()

{

    string a("hello"); // 有參構造

    string b(a); // 显式调用复制构造函数

    string c;//无参构造函数

    c=a;//调用运算符重载

    string d=c;//隐式調用复制构造函數,而不是操作符重載,因为d并没有被分配到资源

    return 0;

}

 

构造函数