普通成员函数和析构函数中调用delete this

本文探讨了在C++中,类的普通成员函数和析构函数中调用`delete this`的影响。实验结果显示,普通成员函数中调用`delete this`不会引发问题,但析构函数中这样做会导致死循环。对于栈对象,`delete this`会导致错误,而堆对象则会在析构后释放内存。
摘要由CSDN通过智能技术生成

delete是C++中的一个运算符,它是和new配合起来使用。我们知道new的实际操作是先分配一块内存,再调用对象的构造函数。而delete恰好和new的操作顺序相反,即先调用析构函数,再释放这块内存
那现在的问题是如果在类的成员函数中调用delete this,也就是相当于“类对象的自杀”,会发生什么?
这里类的成员函数,大致分成类的普通成员函数和析构函数中对delete的调用。
实践是最好的验证方法,来看代码:

  • 普通成员函数

#include <iostream>
using namespace std;

class foo
{
   
private:
	int a;
public:
	foo() {
   
		a = 10;
	}
	~foo() {
   
		a = 0;
	}
	int test() {
   
		cout << "a的值是 " << a << endl;
		cout << "this保存的地址是 " << this << endl;
		delete this;
	}
	
};

int main(int argc, char const *argv[])
{
   
	foo* f = new foo();
	f->test();
	return 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值