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

Responder a