c++之隐式成员函数

c++自动提供下列成员函数:
 1.默认构造函数,如果没有定义构造函数
 2.复制构造函数,如果没有定义
 3.复制操作符,如果没有定义
 4.默认析构函数,如果没有定义
 5.地址操作符,如果没有定义
 我的一篇文章《c++之参数传递》中的StingBad案例就出现了:两次复制构造函数,导致析构函数被调用多了两次。
 一、默认构造函数
 1.如果用户没有提供任何构造函数,c++创建默认构造函数(没有任何参数,也不执行任何操作)
 2.用户定义构造函数,带参数的也可以是默认构造函数,只要参数都有默认值。
 二、复制构造函数(用户没有定义与赋值是相同的的构造函数,譬如用户定义类Sting(& p,int i)而没有定义Sting (& p),当用户用String s1("asdds")系统会复制(创建)构造函数Sting(&p))
 1.复制构造函数用于将一个对象复制到新创建的对象中,也就是说用于初始化过程中,二不是常规赋值中。类的复制构造函数原型通常如下:
 Clsaa _name (const Class_name &)
 譬如:
 StringBad (StringBad &)
 1.1复制构造函数何时会被调用呢?
 
 (1)新建一个对象并将其初始化为同类现有对象时,复制构造函数会被调用(当按值传递对象或函数返回对象时)系统会创建历史对象,都会使用复制构造函数。
 2.2复制构造函数的功能
 (1)默认的复制构造函数是逐个复制非静态成员,复制的是成员的值。
 3.3复制构造函数有什么缺点?
 (1)不管对象是如何创建的,析构函数都会在对象过期时调用(所以有一些对象被隐式复制构造函数创建,而没有任何提示,用户不知道对象的创建,如果有指针成员可能会对同一内存多次释放导致出错)
 <pre>
 如果类中包含有new初始化的指针成员,应当定义一个复制构造函数,以复制指向的数据而不是指针(深度复制),这样析构函数释放内存时就不会对同一内存多次释放
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值