构造函数和重载的运算符执行顺序

Asi*_*taq 3 c++ constructor

我对这段代码感到困惑.

#include <iostream>
using namespace std;
class A{
    public:
        A(){
            cout << "Constructor" << endl;
        }
        ~A(){
            cout << "Destructor" << endl;
        }
        void operator ~(){
            cout << "\nOverloaded Operator";

        }
};
int main(){
    ~A();
    cout << "\nBefore End";
}
Run Code Online (Sandbox Code Playgroud)

产量

Constructor

Overloaded OperatorDestructor

Before End
Run Code Online (Sandbox Code Playgroud)

我想问一下~A(); 代码构造函数是否A();创建了对象,然后该对象正在调用运算符?如果没有,那么请解释它是如何工作的.谢谢.

Bar*_*rry 5

A()创建一个临时类型A,您调用operator~()它,并在该行末尾销毁.

析构函数是一个特殊的成员函数 - 但它仍然是一个成员函数.因此,如果你要直接调用它 - 这应该只在罕见的特殊情况下完成 - 它仍然必须在一个对象上调用.例如,这个例子将调用析构函数:

A().~A();
Run Code Online (Sandbox Code Playgroud)

但是,它会破坏那个A临时的两次,这很糟糕.