重複の可能性:
この場合、コピー コンストラクターが呼び出されないのはなぜですか?
コピー省略とは何ですか? また、コピー アンド スワップ イディオムをどのように最適化しますか?
私は、ctors とオペレーターのオーバーロードを理解しようとしていじっていました。
#include <iostream>
using namespace std;
class number {
int n;
public:
number(int i=0):n(i) { cout<<"in ctor"<<endl; }
~number() { cout<<"in dtor"<<endl; }
number(const number& obj):n(obj.n) {
cout<<"in copy ctor"<<endl; }
number operator+(const number & obj) {
return number(n+obj.n); }
number operator=(const number &rhs) {
n = rhs.n; cout<<"in assignemnt opr"<<endl; }
void disp() {cout<<n<<endl;}
};
int main()
{
number one(1),two(2);
number three =one + two; //was expecting copy ctor being called here
three.disp();
}
上記のコードを実行すると、次の出力が得られました
オーバーロードされた演算子でone
、two
、un-named
object の3 つのコンストラクターが呼び出されることは理解しています。誰か説明してくれませんか。ありがとう。+
three