通常のコンストラクターとコピーコンストラクターを含むクラスを使用した次の単純なコードがあります
class largeObj
{
public:
largeObj()
{
printf("\nNormal constructor\n");
}
largeObj(const largeObj& mv)
{
printf("\nCopy constructor\n");
}
~largeObj()
{
printf("\nDestroying..\n");
}
void tryme()
{
printf("\nHi :)\n");
}
};
largeObj iReturnLargeObjects()
{
largeObj md;
return md;
}
int main()
{
largeObj mdd = iReturnLargeObjects();
mdd.tryme();
return 0;
}
出力は
通常のコンストラクタ
コンストラクターのコピー
破壊..
こんにちは :)
そして、私はその理由を理解しました。
しかし、次の行を置き換えると
largeObj mdd = iReturnLargeObjects();
と
largeObj& mdd = iReturnLargeObjects();
出力は同じですが、それはなぜですか?
つまり、最初のケース (& なし) に別のコピーがあるべきではありませんか? これら 2 つの行の違いは何ですか? また、なぜ同じように動作するのですか?