new/delete完美内存释放

本文探讨了C++中new/delete操作的工作原理,包括内存分配和构造/析构过程。通过实例展示了不当使用new可能导致的内存泄漏问题,并提出了常见的解决方案。此外,介绍了STL如何通过allocator避免直接使用new/delete,以及如何通过自定义模板类实现完美内存释放,确保析构函数在释放内存前被正确调用。
摘要由CSDN通过智能技术生成

一、new/delete     

    在c++中新增了new/delete关键字,当我们定义了一个类Class Test;时,auto  test = new TestNew() 这条语句将会执行Test的构造函数默认构造函数,例如:

class TestNew
{
public:
	TestNew()
	{
		_i = 0;
		_c = 0;
		std::cout << _i << _c;
	}

	~TestNew()
	{

	}

private:
	int   _i;
	float _c;
};

int main()
{
	auto test_new = new TestNew();
	return 0;
}

     实际上  new和delete操作都分为两步,new 操作首先 malloc sizeof(TestNew)大小的内存空间,再去执行TestNew()构造函数。同时delete test_new 操作是先执行~TestNew()操作,再执行free(test_new)操作。 所以导致了一些问题的出现,举例如下:

class TestNew
{
public:
	TestNew()
	{
		_i = new int[10];
		_c = 0;
		std::cout << "TestNew()" << std::endl;
	}

	~TestNew()
	{
        if (_i != nullptr)
        {
            delete[] _i;
            _i = nullptr;
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值