[C con Clase] DUDA CONTENEDOR

Steven Davidson srd4121 en njit.edu
Mar Jun 23 20:27:21 CEST 2009


Hola Pedro,

Pedro Rodríguez González wrote:
> Gracias David y gracias a Steve...
> 
> FUNCIONA SIN PROBLEMAS!!!
> 

De nada; para eso estamos :)

> MiContenedor Lista()
> {
>    MiContenedor MC;
>    ...
>    return MC;
> }
> ...
> pero y si quisiera que me devolviera una referencia sin pasarle un
> argumento
> ...
>  MiContenedor& Lista( /* MiContenedor &MC */ )
>  {
>     ...
>     return MC;
>  }
> 

Lo único que serviría es que tal objeto exista fuera de la función. Esto 
sería, si el objeto es global o si creamos memoria dinámicamente. Por 
ejemplo,

// Global
MiContenedor MC;

MiContenedor& Lista()
{
   ...
   return MC;
}

Claro que si hacemos esto, no hay necesidad de retornar nada, porque 
'MC' es global.


Con la otra opción, tenemos lo siguiente:

MiContenedor& Lista()
{
   MiContenedor *pMC = new MiContenedor;
   ...
   return *pMC;
}

Con esto último, tenemos que liberar la memoria en algún momento de 
nuestro programa. Ninguno de estos casos es recomendable.

> ...
> ...
> Queda otra opción, alguna idea? de todas formas escapo con ese 
> arreglo... pero lo ideal sería lo segundo propuesto
> 

No veo por qué dices que es ideal retornar una referencia a un objeto. 
En C++, nos es igual tratar un objeto directamente que a través de una 
referencia. Recuerda que una referencia no es más que otro nombre 
alternativo - un sobrenombre. Esto significa que el objeto debe existir 
en alguna parte.

Ahora bien, si requieres polimorfismo, entonces debes tratar los objetos 
a través de una referencia o de un puntero. Pero sospecho que esto no es 
el caso.


Espero haber aclarado el tema.

Steven





Más información sobre la lista de distribución Cconclase