malloc开辟的空间能否用delete释放 相对的 new开辟的空间能否用free释放

今天来 搞搞事情!!!网上说 如果这二者 相互对调配对使用的话 会出现 内存泄漏、内存释放不完全等等(http://bbs.csdn.net/topics/310145653)
今天来验证验证

初步可以看出 free()并没有把P2释放 而这只能看出 free并没有令程序调用析构函数来释放 这个也说的过去 毕竟free是C语言的

为了检验是否真的没有释放P2 我们加了一行代码 输出 P2的地址看看 是否还存在 结果可想而知。。。。

分割线==============

用上面的代码 检验 看不出啥来

咱们加入个成员 num 来观察
发现num可以被释放


#include <iostream>;
using namespace std;

class T {

public :
	int num;

public:
	T() { cout << "constructor" << endl; }
	~T() { cout << "destructor" << endl; }
};

int main()
{
	T* p1 = (T *)malloc(sizeof(T));
	p1->num = 123;

	cout << p1->num << endl;

	delete (p1);
	cout << p1->num << endl;

	T* p2 = new T;
	p2->num = 666;

	cout << p2->num << endl;
	free(p2);
	cout << p2->num << endl;

	system("pause");
	return 0;
}

但是 实际应用中咱不能这么干 !!!

从输出的对话框可以看出 用malloc 和free 的话 不能调用到 构造函数 和析构函数

实际应用中 对象实例的时候 如果有动态内存分配的话 那就扎心了 老铁

所以说 该是一对的就是一对 上天安排的最大嘛 hhh

posted @ 2017-11-01 18:10  东南坼  阅读(1960)  评论(0编辑  收藏  举报