【new和free,malloc和delete混用会有什么问题】

目录

一、new和free混用

二、malloc和delete混用


一、new和free混用


 //构造函数中初始化
 //析构函数清理资源
class A
{
private:
	int* p;

public:
	A()
	{
		std::cout << "A()" << std::endl;
	}

	~A()
	{
		std::cout << "~A()" << std::endl;
	}
};

// 构造函数中初始化
// 析构函数清理资源
class A
{
private:
	int* p;

public:
	A()
	{
		p = new int(1);
		std::cout << "A()" << std::endl;
	}

	~A()
	{
		delete p;
		p = nullptr;
		std::cout << "~A()" << std::endl;
	}
};

 

 总结:

  • 如果new之后进行free,程序可以运行成功,但是不会调用析构函数。
  • 如果析构函数中有资源需要进行清理的话,new之后进行free会存在内存泄露的问题
  • 最后不要new和free一起用,即使程序运行没有问题,可能会存在内泄露的问题。

二、malloc和delete混用

//构造函数中初始化
 //析构函数清理资源
class A
{
private:
	int* p;

public:
	A()
	{
		std::cout << "A()" << std::endl;
	}

	~A()
	{
		std::cout << "~A()" << std::endl;
	}
};

 //构造函数中初始化
 //析构函数清理资源
class A
{
private:
	int* p;

public:
	A()
	{
		p = new int(1);
		std::cout << "A()" << std::endl;
	}

	~A()
	{
		delete p;
		p = nullptr;
		std::cout << "~A()" << std::endl;
	}
};

总结:

  • malloc之后调用delete,不会调用构造函数进行初始化,会调用析构函数进行资源清理。
  • 如果析构函数有资源需要清理,程序会崩溃;如果没有资源清理,程序运行成功。
  • 不建议malloc之后使用delete,程序可能会崩溃。
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小唐学渣

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

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

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

打赏作者

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

抵扣说明:

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

余额充值