Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - possibile svista nella classe auto_ptr
Forum - C/C++ - possibile svista nella classe auto_ptr

Avatar
hack3r (Normal User)
Rookie


Messaggi: 38
Iscritto: 14/06/2009

Segnala al moderatore
Postato alle 16:24
Venerdì, 31/07/2009
sicuramente sto dicendo una caz***ta, perchè la libreria standard è ultratestata, ma nella classe auto_ptr
il cui header file su linux si strova in usr/include/c++/(ver GCC)/backward/auto_ptr.h
e possibile ci sia un errore :
vi espongo le mie riflessioni :

il costruttore di copia e l'operatore = della classe usano la funzione release() che restituisce il puntatore e lo setta a 0,

osservate :

Codice sorgente - presumibilmente C/C++

  1. element_type*
  2. release() throw()
  3. {
  4.         element_type* __tmp = _M_ptr;
  5.         _M_ptr = 0;
  6.         return __tmp;
  7. }



Codice sorgente - presumibilmente Plain Text

  1. auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { }



Codice sorgente - presumibilmente Plain Text

  1. template<typename _Tp1>
  2.     auto_ptr(auto_ptr<_Tp1>& __a) throw() : _M_ptr(__a.release()) { }



Codice sorgente - presumibilmente C/C++

  1. auto_ptr&
  2. operator=(auto_ptr& __a) throw()
  3. {
  4.         reset(__a.release());
  5.         return *this;
  6. }



in questo modo quando si copia un auto_ptr, ad esempio così :

Codice sorgente - presumibilmente Plain Text

  1. auto_ptr<int> intPtr_1(new int);
  2. auto_ptr<int> intPtr_2(intPtr_1);



o con l'operatore = :

Codice sorgente - presumibilmente Plain Text

  1. auto_ptr<int> intPtr_1(new int);
  2. auto_ptr<int> intPtr_2();
  3. intPtr_2 = intPtr_1;



in entrambi i casi il puntatore di intPtr_1 viene settato a 0

la mia domanda : non sarebbe meglio utilizzare get(), che restituisce il puntatore senza distruggerlo


No money, no problem!
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 21:27
Venerdì, 31/07/2009
Nessuna svista.

Fondamentalmente un auto_ptr non puo' essere copiato. Se questo avviene, esso deve perdere la "proprietà" che viene assunta dal nuovo.


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
hack3r (Normal User)
Rookie


Messaggi: 38
Iscritto: 14/06/2009

Segnala al moderatore
Postato alle 10:18
Sabato, 01/08/2009
ha, :d, che strano, va bene lo stesso, non me lo aspettavo :noway: :om:


No money, no problem!
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 12:17
Sabato, 01/08/2009
E' nella definizione di auto_ptr ... a proposito leggi gli articoli di Carlo Pescio ...


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
hack3r (Normal User)
Rookie


Messaggi: 38
Iscritto: 14/06/2009

Segnala al moderatore
Postato alle 13:08
Sabato, 01/08/2009
scusate :-|


No money, no problem!
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 13:11
Sabato, 01/08/2009
Perche' scusarsi? Il mio era un suggerimento per approfondire l'argomento (Carlo Pescio e' un'autorità per il C++ ...) non un rimprovero ...


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote