Avere un costruttore di copia pubblica farà compilare il piccolo programma , ma non mostrerà l'effetto collaterale "Copia".Perché è richiesto un costruttore di copie pubbliche anche se non è stato richiamato?
#include <iostream>
class X
{
public:
X(int) { std::cout << "Construct" << std::endl; }
// Having a public copy constructor will make the little program
// compile, but not showing the side effect "Copy".
private:
X(const X&) { std::cout << "Copy" << std::endl; }
private:
X& operator = (const X&);
};
int main() {
X x = 1;
return 0;
}
X x = 1 significa X x (X (1)) per quanto ne so, ma è ottimizzato su X x (1); – odinthenerd
È necessario in modo che il codice C++ sia trasferibile tra le implementazioni che possono o meno eseguire l'elisione della copia a propria discrezione. – jrok
Prova a compilare con il flag '-fno-elide-constructors'. –