C ++中的析构函数直接调用

爱德华·罗斯托米扬(Eduard Rostomyan)

因此,下面的代码。

class A
{
    int x;
public:
    A() {x = 3;}
};


int main()
{
    void* mem = operator new(sizeof(A));
    A* obj = static_cast<A*>(new(mem)(A));
    std::cout << obj->x << std::endl;
    obj->A::~A();
    std::cout << obj->x << std::endl;
}

我的第一个问题是:为什么我可以直接调用A的析构函数?我的第二个问题是:为什么输出是:

3
3

销毁析构函数后是否删除对象obj?后三个困扰我。

眼睛的树

为什么我可以调用析构函数?

因为它是公共成员函数,所以您可以调用公共成员函数。

为什么不删除对象?

在您的特定情况下,它仍然存在,因为A它具有琐碎的析构函数。

如果它具有非平凡的名称,则从不允许您再使用的意义上将其删除。如果仍然执行此操作,则您的行为不确定

有关此内容的详细讨论,请阅读此内容

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章