《深入探索C++物件模型》第六章 執行語意學
阿新 • • 發佈:2019-02-16
#include <iostream> class X { public: bool operator==(const X& o) { return ((this == &o)?true:false); } ~X() { std::cout << "X::~X()" << std::endl; } }; class Y { public: operator X() { X x; return x; } Y getY() { return *this; } ~Y() { std::cout << "Y::~Y()" << std::endl; } }; int main(int argc, char* argv[]) { X x; Y y; if(x == y.getY()) ; return 0; }
結果如圖所示:。
main中,程式碼轉換如下:
X x;
Y y;
Y tmp1;
X tmp2;
bool tmp3;
tmp1 = y.getY();
tmp2 = tmp1.operator X();
tmp3 = x.operator==(tmp2);
if(tmp3)
;
tmp2.~X();
tmp1.~Y();
y.~Y();
x.~X();
而第一個X::~X(),則是由於未開始NRV優化,在operator X()中的區域性變數銷燬所產生。