Carlos:
En ningún lugar estas usando el operador=. La línea 75:
Smartptr < Tested> copied = tested;
no implica el uso de operador= si no el uso del constructor de copia.
Por otra parte el operador = no está del todo bien definido. Debería
devolver una referencia así mismo de forma tal de poder encadenar
igualaciones:
a = b = c;
Eso se resuelve haciendo primero b = c y lo que devuelve b.operador=(c)
es igualado a 'a'.
El operador= debería ser algo así:
Smartptr& operator=(Smartptr & i) {
++(*(i.refcount));
instance = i.instance;
refcount = i.refcount;
std::cout << "Smartptr assigned, refcount=" << *refcount << std::endl;
return *this;
}
Saludos!
2009/8/6 Carlos Pantelides <[email protected]>
> Estimadas/os:
>
> En el código que les adjunto, que pretende ser una implementación de smart
> pointer, me encuentro con que el operador= del template Smartptr no es
> invocado. Tendria alguien la gentileza de explicarme el por qué?
>
> Aclaro que es lo que he implementado en el marco de mis preparativos para
> el final, sin recurrir a ningun recurso externo, asi que son bienvenidas las
> correcciones y sugerencias ajenas a mi pregunta. (Ya sé que no es thread
> safe, esa es otra versión).
>
> Adjunto tambien una traza, la parte significativa de la salida de valgrind
> y los comandos de compilación y linkeo.
>
> Muchas gracias anticipadas
>
> Carlos Pantelides
>
>
> Tested constructed with value 3
> Smartptr created, refcount=1
> Smartptr copied, refcount=2
> Tested tested with value 3
> Smartptr destroyed, refcount=1
> Smartptr copied, refcount=2
> Smartptr copied, refcount=3
> Tested tested with value 3
> Smartptr destroyed, refcount=2
> Smartptr destroyed, refcount=1
> Smartptr destroyed, refcount=0
> Smartptr pointed destroyed
> Tested destructed...
>
> == ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 19 from 1)
> == malloc/free: in use at exit: 0 bytes in 0 blocks.
> == malloc/free: 2 allocs, 2 frees, 8 bytes allocated.
> == All heap blocks were freed -- no leaks are possible.
>
>
> g++ -Wall -pedantic -pedantic-errors -ggdb -DDEBUG -fno-inline -std=c++98
> -c -o main.o main.cpp
> g++ main.o -o run
>
>
>
> _______________________________________________
> Lista de correo Programacion.
> [email protected]
> http://listas.fi.uba.ar/mailman/listinfo/programacion
>
>
--
Mauro Ciancio
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion