从构造函数中删除此指针

Deleting this pointer from constructor

本文关键字:指针 删除 构造函数      更新时间:2023-10-16

我尝试从构造函数中删除此指针,之后当我通过成员函数访问私有变量时,该变量被正确获取。

如果我尝试再次删除它(在构造函数或 func(( 中(,我的程序崩溃。这意味着此指针在构造函数中被删除得很好。

class B
{
int a;
public:
B()
{
std::cout << this;
std::cout << "nConstructorn";
delete this;
a = 5;
std::cout << "n" << this;
}
~B()
{
std::cout << "Destructorn";
}
void func()
{
std::cout << "n" << a << " Funcn";
}
};
int main(int argc, char* argv[])
{
B *b = new B();
b->func();
return 0;
}

但是调用 func(( 会打印正确的输出。由于删除了这个,我预计会出现一些错误。为什么 func(( 的隐式参数在删除时没有更新?

delete this是允许的,而且很好。但是,在删除类后访问类的任何成员是不允许的,并且是未定义的行为。您的代码看起来有效是UB可以采用的一种形式。