C++析构函数与构造函数深拷贝浅拷贝(C++初学面向对象编程)

一、析构函数

1、析构函数的作用
对象消亡时,自动被调用,用来释放对象占用的内存空间。

2、属性特点
(1)名字与类名相同
(2)在前面需要加上"~"
(3)无参数,无返回值(也不能加void)
(4)一个类最多只有一个析构函数
(5)不自定义析构函数C++会生成默认析构函数

二、C++默认生成的函数

在默认情况下,定义一个C++类都会默认生成以下三个函数:

  • 默认构造函数(无参,函数体为空)
  • 默认析构函数(无参,函数体为空)
  • 默认拷贝构造函数(对类中非静态成员进行简单值拷贝)

注意:
若自定义了拷贝构造函数,将不再提供任何构造函数。
若自定义了普通构造函数,将不会提供默认构造函数,但还是会提供默认拷贝构造函数。

三、构造与析构的调用顺序

构造函数是先定义的先调用,而析构函数是先定义的后调用,类似于“栈”存储结构。

class Test
{
   
   
    int id;
public:
    Test(int i)
    {
   
   
        id = i;
    }
    ~Test()
    {
   
   
        cout<<"ID: "<<id<<" 已析构对象内存空间"<<endl;
    };
};
 
Test t0(0);                        //最先创建的对象,最后释放
 
void Func()
{
   
   
    static Test t1(1);               //创建静态对象,会在整个程序结束时自动释放
    Test t2(2);             //在Func结束时自动释放
    cout<<"-----Func-----"<<endl;
}
 
int main()
{
   
   
    Test t3(3);
    t3 = 10;                         //类型转换构造函数,这里会创建临时对象,将int型转成Test类型对象,在赋值结束后,临时变量销毁
    cout<<"------主函数开始-------"<<endl;
    {
   
   
        Test t4(4);                  //花括号代表作用域,不需要等到main方法结束就释放了
    }
    Func();                          //进入Func函数
    cout<<"------主函数结束-------"<<endl;
    return 0;
}

四、构造函数的浅拷贝

就是构造函数只进行简单的值拷贝。

/*浅拷贝*/
#include <iostream>
#include
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸿蒙Next

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值