Итак, у меня есть следующий код, который не скомпилируется на gcc 4.2.1 на OSX.Я получаю ошибку:
testref.cpp: In function ‘int main()’:
testref.cpp:10: error: ‘A::A(const A&)’ is private
testref.cpp:20: error: within this context
А вот код
#include <cstdio>
class A {
public:
A() { i=0; printf("A ctor\n"); }
~A() { printf("A dtor\n"); }
private:
A(const A& other) { i=other.i; printf("A COPY CTOR\n"); }
A& operator=(const A& other) { i=other.i; printf("A COPY operator\n"); return *this; }
private:
int i;
};
void f(const A &aref) {
printf("dummy\n");
}
int main() {
f(A());
return 0;
}
Этот конструктор копирования в этом случае не нужен, так как f получает ссылку (я сделал ее открытой для просмотраесли он вызывается, и это не так).Кроме того, я заставил f получить объект по значению, и до сих пор не вызывается ни конструктор копирования, ни оператор =.Я подозреваю, что это может быть связано с оптимизацией.Какие-либо предложения?Спасибо.