C++何时调用构造函数,何时调用析构函数

前言:

  最近自考C++刷题的时候快被构造函数和析构函数搞得疯掉了,现在特意写一篇博客来记录自己的收获!

 

在我们创建新的对象的时候,都要执行某一个类中的构造函数,而当构造函数中分配了资源之后,当我们销毁一个对象的时候需要一个相应的操作将这些资源释放出去,这就需要析构函数。

一般来说,在有基类和派生类存在时,在创建派生类类型时,会先构造基类,再构造派生类,析构顺序反之,类似于进栈出栈的过程。

遇到的情况:

 

指针不会调用构造和析构函数:

                               C++何时调用构造函数,何时调用析构函数_第1张图片

 

 

当对指针用new在内存中开辟空间的时候会调用构造函数:

                              C++何时调用构造函数,何时调用析构函数_第2张图片

 

 

当我们使用new为指针开辟空间,然后用delete释放掉空间会调用构造和析构函数:

                              C++何时调用构造函数,何时调用析构函数_第3张图片

 

 

当我们函数的形参是一个对象的时候,这时候会系统只会调用析构函数,而缺少形参的构造函数:

                              C++何时调用构造函数,何时调用析构函数_第4张图片

当形参为一个对象的时候,实参也为对象,这时候系统会将实参复制一份给形参,此时系统就不会再给形参额外调用构造函数来对形参对象初始化了,所以就不会调用构造函数,但是形参被销毁的时候还是会调用析构函数!

 

当我们函数的形参是一个引用的时候,这时候会系统不调用构造函数和析构函数:

                              C++何时调用构造函数,何时调用析构函数_第5张图片

当形参为一个引用的时候,实参也对象,这时候系统会将形参指向实参,此时系统就不会对形参调用构造函数和析构函数!

 

总结:

   我感觉构造函数存在的目的就是为了给对象在内存中开辟空间并且给对象设置一些初始值,而析构函数就是将某个对象从内存中抹除,而设置的,经典的例子就是上边的指针的例子,以上就是我的一些感想,欢迎小伙伴们在留言区写出自己的疑惑,我很高兴和大家分享

你可能感兴趣的:(C++)