重複の可能性:
デストラクタが一度だけ呼び出されたのはなぜですか?
以下のコードを考えると、gccでの出力を理解できません。2つのオブジェクトが作成および破棄されることを期待していますが、代わりにコンストラクタとデストラクタへの呼び出しが1つだけ表示されます。ここで何が起こっているのですか?
#include <string>
#include <iostream>
struct Huge{
Huge() { std::cout << "Constructor" << std::endl; }
Huge(Huge const &r) { std::cout << "Copy Constructor" << std::endl; }
~Huge() { std::cout << "Destructor" << std::endl; }
};
Huge g() {
std::cout << "Entering g" << std::endl;
Huge temp;
std::cout << "Exiting g" << std::endl;
return temp;
}
int main(){
Huge h2(g());
std::cout << "Before leaving main" << std::endl;
}
g ++(4.4)でのこのコードの出力は次のとおりです。
gを入力する
コンストラクタ
gを終了します
メインを離れる前に
デストラクタ