C++ delete 和 deallocate 的区别

delete 和 deallocate 的区别

delete是释放动态内存

成员函数中 new的动态内存

deallocate是释放对象内存

成员所占的内存

using namespace std;

class preson{
public:
	person(){
		ptr=new int[10];
	}
	~person(){ delete ptr;}
private:
	int *ptr;
};

int main(){
	while(1){
		Person *p=new person;
		allocator<person> a;
		a.deallocate(p.sizeof(person));
	}
	return 0;
}

运行结果:程序崩溃

结论:
上述代码,如果deallocate能把所有的内存都释放干净,那么程序将会一直进行下去,因为空间不会增加,但是程序崩溃了,就是因为有没有释放的内存,而那个内存正是每次创建person的时候构造函数new的内存。,deallocate只释放了创建对象时的内存,new的动态内存没有释放掉,如果调用析构函数,delete掉通过new制造出来的动态内存,则程序便可以运行下去。


求点赞👍👍👍
原创不易,点赞容易。
您的鼓励就是我的最大动力!!!。
本篇博客到此结束,谢谢大家观看。