Я довольно noobish, когда дело доходит до С++, что лучший способ вернуть объект? Я исхожу из мира сценариев, где объекты всегда являются ссылками, и я пытаюсь достичь такого же понятия... Я основываю это на Когда пройти по ссылке и когда pass by pointer в С++?, где один пользователь заявил: "Хорошее эмпирическое правило:" Используйте ссылки, когда можете, и указатели, когда вам нужно ".
// basic layer class
class Layer { private: Channel channel; // NEVER NULL };
// return object by pointer
Channel *Layer::getChannel() {
return &channel;
};
// return by reference
Channel& Layer::getChannel() {
return channel;
};
Проблема со второй версией заключается в том, что компилятор примет эту строку:
Channel channel = layer.getChannel(); // creates a copy BAD
когда это должно быть:
Channel &channel = layer.getChannel(); // reference good
Есть ли способ принудительно выполнить вызов второго варианта, чтобы заставить его не создавать новый канал, или это первый вариант в любом случае, даже если он никогда не будет NULL?