En principio los metodos factory, o metodos de creacion de objetos, si o si
tienen que devolver algo creado en el heap para que ese objeto este visible
desde otra zona de codigo, (esto se hace mediante punteros no queda otra)
porque si creas un objeto en el stack (del metodo mismo) y devolves una
referencia si o si terminas con un segmentation faut, claro està que si
definis una variable estatica en el metodo y devolves una referencia, es
perfectamente valido porque seria una variable "global" y existe una unica
referencia de esa variable durante toda la vida de ese programa, entonces no
vas a tener problemas retornando una referencia a esa variable como te
pusieron en el ejemplo anterior...
Los locks en si si estas queriendo modelar el lock de un mutex o un mutex en
si es muuuuy mala solucion que esa clase sea copiable porque es un recurso
del sistema operativo y en principio los recursos del sistema operativo son
limititados y en general no se pueden copiar, tomemos el caso de los file
streams de C++, son objetos no copiables, no tienen operador de copia, lo
mismo pasa con los mutex, depende de como modeles tu clase podes hacer que
en el destructor se haga un lock y se destruya el mutex liberando los
recursos y al realizar la copia del objeto el puntero interno al
pthread_mutex o como sea que lo uses ya se ha liberado con lo cual estarias
encapsulando a un puntero liberado con lo cual huele a segmentation fault.
Lo mejor es usar punteros, creas un lock en este caso en el heap (memoria
dinamica mediante new) y lo liberas cuando no lo usas, o sino la otra opcion
es tener un manejador de referencias, como un smart pointer que cuente
cuantas referencias hay y en base a eso sepa comportarse si liberar el mutex
o no, o liberar la memoria o no...
Saludos
Pablo
El 22 de septiembre de 2008 23:05, Dario Griffo <
[EMAIL PROTECTED]> escribió:
> Carlos Pantelides wrote:
>
>> 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.
>>
>
> Depende del concepto que estés manejando.
> Esto es perfectamente legal y soluciona lo que pedis arriba
>
> A& A::getRef()
> {
> static A var;
> return var;
> }
>
> No creo que aplique a lo que tengas que hacer pero es para mostrarte que si
> se pueden devolver referencias en los metodos estaticos..
> Podes googlear Singleton Scott Meyers y encontrar algo más
> Saludos
>
> --
> Que Agüero ni que Palacio! ..... NOSSS VAMOSS A LASSSSSSS VEGASSSSSSSS
> BETO!!!!!
> -- El Bambino
>
> _______________________________________________
> Lista de correo Programacion.
> [email protected]
> http://listas.fi.uba.ar/mailman/listinfo/programacion
>
>
--
Si yo tengo una manzana y tú tienes una manzana, luego de intercambiarlas
ambos tenemos una manzana. Si yo tengo una idea y tú tienes una idea, luego
de intercambiarlas ambos tenemos dos ideas.
Apoyando a la comunidad Open Source.
Facebook prifile:
http://www.facebook.com/profile.php?id=1244601012
Orkut prifile:
http://www.orkut.com/Profile.aspx?uid=12594853021246287134
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion