Este site estados en "Propiedad, fuentes y sumideros":¿Hay alguna contradicción entre estas dos fuentes acerca de la clase de plantilla `auto_ptr`?
"Al copiar un auto_ptr
, se transfiere automáticamente la propiedad de la fuente auto_ptr
al objetivo auto_ptr
; si el objetivo auto_ptr
ya es dueño de un objeto , ese objeto se libera primero. Después de la copia, solo el destino auto_ptr
posee el puntero y lo eliminará a su debido tiempo, mientras que el origen vuelve a un estado nulo y ya no se puede usar para referirse al objeto propiedad. ".
Consideremos ahora la definición de operator=()
para la templacte<classX> class auto_ptr
, en el capítulo 14, página 368 de BS de El C++ Programming Language Tercera Edición:
auto_ptr& operator=(auto_ptr& a) throw() { ptr = a.ptr; a.ptr = 0; }
no puedo ver el operador liberar el objeto dirigido por ptr
, en el caso ptr != 0
!
Algo más sospechoso: que 'operator =' no devuelve nada. – Mat
@sbi El lenguaje de programación C++ tercera edición – Belloc
¿Cuál es el tipo de 'ptr'? ¿Es eso 'classX *' o 'auto_ptr_guts'? Si es el último, el código anterior sería bastante trivial. –
MSalters