5 Stimmen

C++ Wird hier der Kopierkonstruktor aufgerufen?

Angenommen, Sie haben eine Funktion wie diese:

Foo foo() {
  Foo foo;

  // more lines of code

  return foo; // is the copy constructor called here?
}

Foo bar() {
  // more lines of code

  return Foo(); // is the copy constructor called here?
}

int main() {
  Foo a = foo();
  Foo b = bar();  
}

Wenn eine der Funktionen zurückkehrt, wird dann der Kopierkonstruktor aufgerufen (angenommen, es gibt einen)?

10voto

aschepler Punkte 68538

Sie kann angerufen werden oder auch nicht. Der Compiler hat die Möglichkeit, in beiden Fällen die Rückgabewert-Optimierung zu verwenden (obwohl die Optimierung etwas einfacher ist in bar als in foo ).

Auch wenn die RVO die eigentlichen Aufrufe des Kopierkonstruktors eliminiert, muss der Kopierkonstruktor immer noch definiert und zugänglich sein.

8voto

Nikolai Fetissov Punkte 79627

Abhängig von der Optimierung der Rückgabewerte angewandt wird oder nicht.

2voto

xtofl Punkte 39285

それは Mai genannt werden. Es kann auch wegoptimiert werden. Siehe einige andere Frage in dieselbe Richtung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X