码迷,mamicode.com
首页 > 其他好文 > 详细

构造函数

时间:2014-08-30 22:55:50      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:style   数据   sp   on   c   as   对象   bs   return   

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

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;

}

 

构造函数

标签:style   数据   sp   on   c   as   对象   bs   return   

原文地址:http://www.cnblogs.com/notlate/p/3946901.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!