私は次のコードを持っています:
#include <iostream>
#include <new>
using namespace std;
class test {
int *p;
public:
test operator=(test a);
test() {
p = new int [2];
cout <<"Default Constructor was done here." << "\n";
}
test(const test &a) {
p = new int [2];
this->p[0] = a.p[0];
this->p[1] = a.p[1];
cout << "Copy Constructor was done here." << "\n";
}
~test() {
delete p;
cout << "Destructor was done here." << "\n";
}
int set (int a, int b) {
p[0] = a;
p[1] = b;
return 1;
}
int show () {
cout << p[0] << " " << p[1] << "\n";
return 2;
}
};
test test::operator=(test a) {
p[0] = a.p[0];
p[1] = a.p[1];
cout << "Operator = was done here" << "\n";
return *this;
}
test f(test x) {
x.set(100, 100);
return x;
}
int main () {
test first;
test second;
first.set(12, 12);
//f(first);
//second = first;
second = f(first);
first.show();
second.show();
getchar ();
return 0;
}
コピー コンストラクターは 3 回しか呼び出されませんでしたか? なんで?私が理解していれば、4 つのコピーを作成しました (オブジェクトを func に送信し、func は値を返し、オブジェクトを operator= に送信し、operator= は値を返します)。