因此下面的代码。
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。