因此下面的代码。

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?后三个困扰我。

最佳答案



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



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

如果它具有非平凡的名称,则从不允许您再使用的意义上将其删除。如果仍然这样做,您将拥有undefined behavior

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

09-11 18:42
查看更多