我对这段代码感到困惑.
#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();创建了对象,然后该对象正在调用运算符?如果没有,那么请解释它是如何工作的.谢谢.
A()创建一个临时类型A,您调用operator~()它,并在该行末尾销毁.
析构函数是一个特殊的成员函数 - 但它仍然是一个成员函数.因此,如果你要直接调用它 - 这应该只在罕见的特殊情况下完成 - 它仍然必须在一个对象上调用.例如,这个例子将调用析构函数:
A().~A();
Run Code Online (Sandbox Code Playgroud)
但是,它会破坏那个A临时的两次,这很糟糕.