c++之隐式成员函数

阅读: 评论:0

c++之隐式成员函数

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初始化的指针成员,应当定义一个复制构造函数,以复制指向的数据而不是指针(深度复制),这样析构函数释放内存时就不会对同一内存多次释放
 

本文发布于:2024-01-31 04:54:51,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170664809425676.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   成员   隐式
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23