Soy bastante noobish cuando se trata de C++, ¿cuál es la mejor forma de devolver un objeto? Vengo del mundo de los guiones donde los Objetos siempre son referencias, y trato de lograr la misma noción ... Estoy basando esto en When to pass by reference and when to pass by pointer in C++?, donde un usuario dijo: "Una buena regla general:" Usar referencias cuando puedes y punteros cuando tienes que "."¿La mejor manera de devolver un objeto en C++?
// 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;
};
El problema con la segunda versión es que el compilador aceptará esta línea:
Channel channel = layer.getChannel(); // creates a copy BAD
cuando debería ser:
Channel &channel = layer.getChannel(); // reference good
¿Hay alguna manera de hacer cumplir la persona que llama de la segunda opción para forzarlo a no crear un nuevo canal, o es la primera opción mejor de todos modos, incluso si nunca será NULL?
"Estoy que viene del mundo de secuencias de comandos donde los objetos son siempre referencias, y estoy tratando de lograr la misma noción de" ¿Por qué estás tratando de pasar todo a su alrededor como referencias en C++? No es natural hacer eso en C++. La "regla de oro" que cite probablemente se establezca mejor como "Usar valores (y copias) siempre que sea posible, de lo contrario use referencias, y solo como último recurso use punteros". –
Teniendo en cuenta su experiencia, le sugiero encarecidamente que aprenda acerca de ** punteros inteligentes ** para que obtenga administración de memoria automática para los objetos asignados en el montón. –