析构函数 构造函数

构造函数:一般用于对象的初始化

函数原型:例声明一个Cperson类(成员变量即成员方法的声明暂且不加,下同)  则其默认生成构造函数原型为

                         Cperson()

                                    {}     

                   即必须与类名相同

构造函数特点及使用法则:

        特点:

                1.构造函数无返回值

                2.函数可以重载(用户可以自行更改构造函数中的参数,以实现自定义的初始化形式,且当自定义的重载构造函数存在时,系统不再生成默认构造函数而是调用自定义的重载构造函数)

         使用法则:

                        1.当一个对象生成时,必定会调用一个构造函数(自定义或系统生成)

扫描二维码关注公众号,回复: 2539946 查看本文章

                        2.构造函数不可手动调用(即不能像其他函数一样调用方式)

例:Cperson person;可行(自动调用的无参构造函数)。  Cperson person(带参);可行(自动调用的自定义重载函数)。

       Cperson person();不可行(此时相当于调用一个prerson函数)。 person.Cperson();不可行(此时属于主动调用)

 

析构函数:主要用于程序结束时的空间清理工作

函数原型:~Cperson()

                   {}

                 即在类名前加一个~。

析构函数特点及使用情景:

特点:

          1.无函数返回值

          2.没有参数

          3.不可重载

使用情景:

          1.对象开辟的内存位于栈上:此时在程序结束时,系统会自动调用析构函数,检索对象在栈上使用的内存,从而进行空间清除(系统调用析构函数的顺序与每一个对象压入栈的顺序相反)

             2.对象开辟的内存位于堆上:此时压入栈的只是对对象开辟内存的一个标识,析构函数无法通过标识对堆上的内存空间进行操作,故需要使用delete函数来指引析构函数,从而完成对堆上内存空间的清理。

 

注:析构函数可以主动调用,但是主动调用可能会出现与系统调用析构函数重复针对同一块空间的情况,从而导致程序崩溃,故不建议主动调用析构函数。

 

猜你喜欢

转载自blog.csdn.net/wm06260514/article/details/81382986