Was sollte ein C ++ Getter zurückgeben?

Was ist die beste Vorgehensweise für eine C ++ - Getter-Methode, die einen nicht trivialen Typ zurückgeben soll, sondern einen Member der Typklasse oder Struktur.

Rückgabe nach Wert, z. B .:MyType MyClass::getMyType() { return mMyType; }Rückkehr per const Referenz:const MyType& MyClass::getMyType() { return mMyType; }Rückgabe nach Adresse:MyType* MyClass::getMyType() { return &mMyType; }

woher

class MyType { /* ... */ };

class MyClass
{
  private:
     MyType mMyType;
}

Ich mache mir speziell Sorgen um die folgenden Verwendungen dieser Methode. Können Sie bitte im Detail erläutern, wie sich dies auf das Kopieren des Objekts auswirken könnte und welche Gefahr besteht, dass Verweise und veraltete Zeiger hängenbleiben, wennfunction() will es für die weitere Verwendung speichern.

MyType* savedPointer;

SomeType function(MyType* pointer) { savedPointer = pointer; };

ein. gültig für 1. und 2.

{
  MyType t = myClass.getMyType();
  function(&t);
}

// is savedPointer still valid here?

b. gültig für 1. und 2.

{
  const MyType& t = myClass.getMyType();
  function(&t);
}

// is savedPointer still valid here?

c. gültig für 1. und 2.

{
  MyType& t = myClass.getMyType();
  function(&t);
}

// is savedPointer still valid here?

d. gültig für 3.

{
  MyType* t = myClass.getMyType();
  function(t);
}

// is savedPointer still valid here?

wohermyClass ist ein Objekt vom TypMyClass.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage