首页 > 解决方案 > 从构造函数中删除这个指针

问题描述

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

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

class B
{
    int a;
public:
    B()
    {
        std::cout << this;
        std::cout << "\nConstructor\n";
        delete this;
        a = 5;
        std::cout << "\n" << this;
    }
    ~B()
    {
        std::cout << "Destructor\n";
    }
    void func()
    {
        std::cout << "\n" << a << " Func\n";
    }
};

int main(int argc, char* argv[])
{
    B *b = new B();
    b->func();
    return 0;
}

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

标签: c++constructorthis

解决方案


delete this是允许的,很好。但是,在删除类后访问该类的任何成员是不允许的,并且是未定义的行为。您的代码似乎可以工作是 UB 可以采用的一种形式。


推荐阅读