Thread View: es.comp.lenguajes.c++
2 messages
2 total messages
Started by mundacho
Tue, 20 Jan 2009 12:51
retornar referencia a objeto asignado dinamicamente
Author: mundacho
Date: Tue, 20 Jan 2009 12:51
Date: Tue, 20 Jan 2009 12:51
30 lines
2140 bytes
2140 bytes
Hola,
Tengo entendido que si mi función retorna una referencia a un objeto
el objeto no es copiado (con el copy control), sino pasado
directamente, es decir, más rápido. Por esto quiero hacer algo
parecido a lo mostrado el fragmento de código de abajo (que compila).
Mi pregunta es si cuando hago la asignación en la función que llama
(en este caso a synchronize) al final de la función llamante myImg
sería destruido correctamente, a pesar de que fue creado con un new
inicialmente?
Gracias de antemano,
eD
------ Comienzo código -------
li::IntImg
&RectangleImageComparator::synchronize(const ili::IntImg &pImage)
{
ili::IntImg *tempObj = new ili::IntImg(pImage);
return *tempObj;
}
// en otra fct haría esto:
ili::IntImg myImg = imComp.synchronize(imgToSynchro);
...
// al final de la otra fct, myImg sería destruido correctamente???
------- Fin código
Re: retornar referencia a objeto asignado dinamicamente
Author: Bartomeu
Date: Thu, 22 Jan 2009 12:14
Date: Thu, 22 Jan 2009 12:14
60 lines
2939 bytes
2939 bytes
No ser� destruido. Todo lo que se crea con new tiene que destruirse con
delete. Nunca he hecho delete de una referencia, pero supongo que se podr�
hacer: delete &myImg.
De todas maneras en tu c�digo tienes un error:
donde pone:
ili::IntImg myImg = imComp.synchronize(imgToSynchro);
deber�a poner (fijate en el &)
ili::IntImg &myImg = imComp.synchronize(imgToSynchro);
Para finalizar. Seria mucho m�s ortodoxo pasar un puntero y seria igual de
r�pido:
------ Comienzo c�digo -------
li::IntImg
*RectangleImageComparator::synchronize(const ili::IntImg &pImage)
{
return new ili::IntImg(pImage);
}
// en otra fct har�a esto:
ili::IntImg *myImg = imComp.synchronize(imgToSynchro);
...
// al final de la otra fct, , para destruirlo
delete myImg;
------- Fin c�digo
<mundacho@gmail.com> escribi� en el mensaje
news:17b78dc8-cdbc-42c8-b477-455c3d1e7459@y1g2000pra.googlegroups.com...
Hola,
Tengo entendido que si mi funci�n retorna una referencia a un objeto
el objeto no es copiado (con el copy control), sino pasado
directamente, es decir, m�s r�pido. Por esto quiero hacer algo
parecido a lo mostrado el fragmento de c�digo de abajo (que compila).
Mi pregunta es si cuando hago la asignaci�n en la funci�n que llama
(en este caso a synchronize) al final de la funci�n llamante myImg
ser�a destruido correctamente, a pesar de que fue creado con un new
inicialmente?
Gracias de antemano,
eD
------ Comienzo c�digo -------
li::IntImg
&RectangleImageComparator::synchronize(const ili::IntImg &pImage)
{
ili::IntImg *tempObj = new ili::IntImg(pImage);
return *tempObj;
}
// en otra fct har�a esto:
ili::IntImg myImg = imComp.synchronize(imgToSynchro);
...
// al final de la otra fct, myImg ser�a destruido correctamente???
------- Fin c�digo
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads