1. 程式人生 > >《深入探索C++物件模型》第六章 執行語意學

《深入探索C++物件模型》第六章 執行語意學

#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()中的區域性變數銷燬所產生。