显式调用析构函数

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? 如果显式调用没有销毁对象,那么它做了什么?

它调用析构函数,但不释放内存。内存将在函数结束时释放。

顺便说一句,如果你不明白发生了什么,你可能不应该这样做:析构函数将在作用域结束时被第二次调用,如果它不能被调用可能会导致问题两次(通常是这种情况)。