Carlos Pantelides, el 22 de septiembre a las 16:09 me escribiste:
> Estimados/as:
> 
> Supongamos que quiero devolver una referencia a un objeto desde un método 
> estático. No veo manera de crear algo y devolver una referencia en lugar de 
> un puntero.
> 
> static Lock & trylock(){
>       return new Lock(); // falla
>       return Lock();     // falla 
> }

Agradecele al compilador, porque lo que querés hacer es una invitación
a un:
a) Leak de memoria (return new Lock())
b) Pisada de memoria (return Lock())

Si quisieras ser realmente jodido, y hacer igual lo del leak de memoria,
podés probar con:
return *new Lock();

Pero no es muy sano.

> Hasta ahora lo mejorcito que logré fue devolver una copia:
> 
> Lock trylock(){
>       return Lock();
> }

Y, devolver un lock por copia, suena a algo problemático, a menos que uses
conteo de referencias o algo así.

> pero la verdad es que no pude aun medir si afecta el comportamiento que 
> espero.
> 
> Veo dos maneras más pero ahi es donde necesito la ayuda:
> 
> 1) Si hago 
> 
> Lock * lock= new Lock();
> 
> como hago para devolver una referencia?

No *querés* devolverlo por referencia! Si lo devolvieras por referencia,
tendrías que hacer una chanchada fiera para liberarlo (delete &lock;
yaiks!) o tendrías un leak de memoria.

> 2) Como declaro un constructor con un nombre arbitrario?

Un constructor tiene el nombre de la clase. En C++ *no* podés tener un
constructor con un nombre arbitrario, lo más cercano que tenés, es lo que
supongo que querés hacer con todo esto, un método estático, pero claro,
para devolverlo lo tenés que devolver como puntero o copia, y de ahí tus
problemas supongo. Igual no sé en que te afecta que el constructor se
llame como la clase.

-- 
Leandro Lucarella (luca) | Blog colectivo: http://www.mazziblog.com.ar/blog/
----------------------------------------------------------------------------
GPG Key: 5F5A8D05 (F8CD F9A7 BF00 5431 4145  104C 949E BFB6 5F5A 8D05)
----------------------------------------------------------------------------
More than 50% of the people in the world have never made
Or received a telephone call
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a