Wird hier kopiert oder nicht?
-
Hi,
wenn ich folgenden Code habe, wird in Zeile 16 dann das ganze Objekt kopiert oder nicht?struct hugeStruct { // a lot of data } hugeStruct foo() { hugeStruct* bar = new hugeStruct; // fill bar return *bar; } int main() { // do something hugeStruct& otherBar = foo(); // do something }
-
Ja, es wird kopiert. Und so wie es da steht, leakt es noch dazu. Ausserdem sollte es eine Warnung bzw. Error geben, weil du einen R-Value an eine non-const Referenz binden möchtest.
-
Wo ist die Referenz denn konstant?
-
weil du einen R-Value an eine non-const Referenz
deine ist eben nicht const - und wenn Sie const ist kannst du es kompilieren - aber hast dennoch ein Memoryleak durch das new
-
theta schrieb:
Ausserdem sollte es eine Warnung bzw. Error geben, weil du einen R-Value an eine non-const Referenz binden möchtest.
Tatsächlich erlaubt Visual Studio sowas als nicht standardkonforme Erweiterung. Man muss schon auf Warning Level 4 stellen damit man wenigstens ne Warnung kriegt. Mach es einfach so und werd glücklich:
hugeStruct foo() { hugeStruct bar; // fill bar return bar; } int main() { // do something hugeStruct otherBar = foo(); // do something }Wenn der Compiler nicht total steinzeitmäßig ist gibts hier Return Value Optimization.
-
sebi707 schrieb:
theta schrieb:
Ausserdem sollte es eine Warnung bzw. Error geben, weil du einen R-Value an eine non-const Referenz binden möchtest.
Tatsächlich erlaubt Visual Studio sowas als nicht standardkonforme Erweiterung. Man muss schon auf Warning Level 4 stellen damit man wenigstens ne Warnung kriegt.
War mir schon bewusst, ich war zu faul um noch mehr zu schreiben.
