Что должен вернуть C ++ getter

Какова лучшая практика для метода получения C ++, который должен возвращать нетривиальный тип, но член класса или структуры.

Возврат по значению, например:MyType MyClass::getMyType() { return mMyType; }Возврат по постоянной ссылке:const MyType& MyClass::getMyType() { return mMyType; }Возврат по адресу:MyType* MyClass::getMyType() { return &mMyType; }

где

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

class MyClass
{
  private:
     MyType mMyType;
}

Я особенно беспокоюсь о следующих применениях этого метода. Не могли бы вы подробно рассказать, как это может повлиять на копирование объекта, а также на опасность висячих ссылок и диких исчезнувших указателей, еслиfunction() хочет сохранить его для дальнейшего использования.

MyType* savedPointer;

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

а. действителен для 1. и 2.

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

// is savedPointer still valid here?

б. действителен для 1. и 2.

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

// is savedPointer still valid here?

с. действителен для 1. и 2.

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

// is savedPointer still valid here?

д. действует в течение 3.

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

// is savedPointer still valid here?

гдеmyClass это объект типа.MyClass

Ответы на вопрос(5)

Ваш ответ на вопрос