显式调用析构函数
Explicit call to the destructor
显式调用析构函数后我还能访问对象吗?
例如,
class A{
public:
A(){
cout<<"Constructor\n";
x=5;
}
~A(){
cout<<"Destructor\n";
}
int x;
};
int main() {
ios_base::sync_with_stdio(false);
A obj;
obj.~A();
obj.x=4;
cout<<obj.x<<endl;
return 0;
}
给出输出
Constructor
Destructor
4
Destructor
如何在调用析构函数后访问 obj.x?
如果显式调用没有销毁对象,那么它做了什么?
它调用析构函数,但不释放内存。内存将在函数结束时释放。
顺便说一句,如果你不明白发生了什么,你可能不应该这样做:析构函数将在作用域结束时被第二次调用,如果它不能被调用可能会导致问题两次(通常是这种情况)。
显式调用析构函数后我还能访问对象吗?
例如,
class A{
public:
A(){
cout<<"Constructor\n";
x=5;
}
~A(){
cout<<"Destructor\n";
}
int x;
};
int main() {
ios_base::sync_with_stdio(false);
A obj;
obj.~A();
obj.x=4;
cout<<obj.x<<endl;
return 0;
}
给出输出
Constructor Destructor 4 Destructor
如何在调用析构函数后访问 obj.x? 如果显式调用没有销毁对象,那么它做了什么?
它调用析构函数,但不释放内存。内存将在函数结束时释放。
顺便说一句,如果你不明白发生了什么,你可能不应该这样做:析构函数将在作用域结束时被第二次调用,如果它不能被调用可能会导致问题两次(通常是这种情况)。