第十九节(构造函数、析构函数、复制构造函数)

C++ Primer plus第五版
第十章

C++中,程序在声明对象时将自动调用构造函数。
构造函数
image.png

构造函数初始化对象的两种方式:
第一种:


image.png

第二种:

image.png
image.png

C++同Java一样,如果没有提供构造函数,那么会存在一个没有任何参数的默认构造函数

image.png
image.png

析构函数

析构函数完成对象的清理工作,在对象过期时会自动调用,例如,如果构造函数使用new来分配内存,则析构函数将使用delete来释放这些内存。
函数原型:

image.png
image.png

C++ Primer plus 第五版

第十二章

复制构造函数

这儿的sports是个已经初始化的StringBad对象

image.png
image.png
何时调用复制构造函数

每当程序生成了对象副本时,编译器都将使用复制构造函数。具体来说,当函数按值传递对象或者一个函数返回对象时,都将使用复制构造函数,按值传递意味着创建原始变量的一个副本,编译器生成临时对象时(比如将三个Vector对象相加时,编译器可能生成临时的Vector对象来保存中间结果)也将使用复制构造函数,何时生成临时对象随编译器而异,单无论哪种编译器,单按值传递和返回对象时,都将调用复制构造函数。

image.png

复制构造函数执行流程:

image.png

当ditto对象析构函数被调用时,将释放str指向的内存,这时候如果再用motto对象去访问str将发生错误。解决这个问题的办法是使用显式复制构造函数。

显式复制构造函数
image.png
image.png
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容