c++内存管理

本文介绍了C++中的内存管理方式,包括使用new和delete动态分配和释放内存,以及它们与C语言中malloc和free的区别。对于自定义类型,new会调用构造函数,delete会调用析构函数。此外,文章还探讨了内存泄漏的危害,并通过代码示例展示了new和delete在自定义类型上的应用。
摘要由CSDN通过智能技术生成

c++内存管理方式

c语言内存管理方式在c++中可以继续使用,但有些地方就无能为力而且使用起来特别麻烦,因此c++又提出了自己的内存管理方式:通过new和delete来对内存进行操作。

void Test()
{
    int *ptr4 = new int;
    //动态申请一个int类型的空间
    int *ptr5 = new int(10);
    //动态申请一个空间并初始化为10
    int *ptr6 = new int[10];
    //动态申请10个int类型的空间
    delete ptr4,ptr5;
    delete ptr6[];
}

注意:申请和释放单个空间使用new和delete,申请和释放连续空间使用new[]、delete[]

new和delete操作自定义类型

#include <iostream>
using namespace std;
class Test
{
public:
    Test():_data(0)
    {
        cout<<"Test()"<<endl;
    }
    ~Test()
    {
        cout<<"~Test"<<endl;
    }
    
private:
    int _data;
};
void Test1()
{
    Test* t1 = (Test*)malloc(sizeof(Test));
    free(t1);//申请单个Test类型空间
    Test* t2 = (Test*)malloc(sizeof(Test)*10);
    free(t2);//申请10个test空间
    
}
void Test2()
{
    Test* t1 = new Test;
    delete t1;
    Test* t2 = new Test[10];
    delete []t2;
    
}
int main()
{
    Test1();
    Test2();
    return 0;
}

运行上述代码后,会发现:在申请自定义类型的空间时,new和delete会分别调用构造函数和析构函数,而malloc和delete则不会。

new和delete的实现原理

对内置类型来说:new、delete和malloc、free基本类似,不同是:new和delete申请和释放的是单个元素的空间,new【】和delete【】申请的是连续的空间而且new失败后会抛异常,而malloc失败会返回NULL。

对自定义类型:
new:1、调用operator new函数申请空间
2、在申请空间上面进行构造函数,完成对对象的构造
delete:1、在空间上执行析构函数,完成对资源的统一清理
2、调用operator delete释放申请空间

内存泄漏

内存泄漏:内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

内存泄漏危害:不仅影响到服务器的性能,还可能造成整个系统的崩溃。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值