Kopie trotz Refrenz
-
Warum kann der Compiler hier die nötigen Sachen für eine Kopie generieren?
class NoCopy { public: NoCopy(int &ref) : var(ref) { } private: //NoCopy(const NoCopy&); //void operator=(const NoCopy&); int &var; }; int main() { int x = 3; NoCopy np(x); auto cp = np; }Ich dachte mit der Referenz würde es implizit nicht gehen, weil sowas geniert werden müsste:
NoCopy(const NoCopy &other) { var = other.var; }Laut generiertem Assemblercode kopiert er aber einfach var.
-
KN4CK3R schrieb:
Ich dachte mit der Referenz würde es implizit nicht gehen, weil sowas geniert werden müsste:
NoCopy(const NoCopy &other) { var = other.var; }Laut generiertem Assemblercode kopiert er aber einfach var.
Ja, das geht ja auch, da folgender Code erzeugt wird:
NoCopy(const NoCopy &other) : var(other.var) { }Was vollkommen legal ist.
Problematisch wirds nur mit operator=.
-
Ok, ich dachte auch beim Kopierkonstruktor würde der Compiler ein Problem sehen. Danke dir.