因此是下面的代码。
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在析构函数调用后没有被删除?第二个 3 困扰着我。
最佳答案
Why can I call the destructor?
因为是公共(public)成员函数,可以调用公共(public)成员函数。
Why is the object not deleted?
在您的特定情况下,它仍然存在,因为 A
有一个普通的析构函数。
如果它有一个非平凡的,它会被删除,因为你不能再使用它了。如果你这样做,你有 undefined behavior .
有关该内容的更详细讨论,请阅读 this .
关于c++ - C++中的析构函数直接调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30170603/