Что должен вернуть 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