Итак, почему конструктор копирования не вызывается в функции «const Integer operator+(const Integer &rv)». Это из-за РВО. Если да, что мне нужно сделать, чтобы предотвратить это?
#include <iostream>
using namespace std;
class Integer {
int i;
public:
Integer(int ii = 0) : i(ii) {
cout << "Integer()" << endl;
}
Integer(const Integer &I) {
cout << "Integer(const Integer &)" << endl;
}
~Integer() {
cout << "~Integer()" << endl;
}
const Integer operator+(const Integer &rv) const {
cout << "operator+" << endl;
Integer I(i + rv.i);
I.print();
return I;
}
Integer &operator+=(const Integer &rv) {
cout << "operator+=" << endl;
i + rv.i;
return *this;
}
void print() {
cout << "i: " << i << endl;
}
};
int main() {
cout << "built-in tpes:" << endl;
int i = 1, j = 2, k = 3;
k += i + j;
cout << "user-defined types:" << endl;
Integer ii(1), jj(2), kk(3);
kk += ii + jj;
}
Я получаю сообщение об ошибке, если я закомментирую конструктор копирования. Я ожидаю, что конструктор копирования будет вызван, когда оператор + вернется. Ниже приведен вывод программы
built-in tpes:
user-defined types:
Integer()
Integer()
Integer()
operator+
Integer()
i: 3 // EXPECTING Copy Constructor to be called after this
operator+=
~Integer()
~Integer()
~Integer()
~Integer()
I::i
вызывается автоматически? Я так не думаю, но не совсем уверен. - person Christian Rau   schedule 15.10.2011operator+
вернется! - person Nawaz   schedule 15.10.2011operator +=
неверен, в средней строке, вероятно, должно быть написаноi += rv.i;
- person Frunsi   schedule 15.10.2011