Utilizzo di puntatori grezzi

0

Quindi dalla risposta più votata a questa domanda , sembra che l'utilizzo di puntatori grezzi per la memorizzazione non è disapprovato così tanto. Tuttavia, allora qual è il punto di un std::weak_ptr ? Pensavo che la conservazione fosse lo scopo esatto di quella classe. In tal caso, c'è qualche circostanza in cui un puntatore raw è considerato buono, codice valido? Se non ce n'è, qual è il punto di averli nella lingua? È semplicemente un artefatto storico?

    
posta wolfPack88 16.06.2014 - 14:23
fonte

2 risposte

4

weak_ptr è utilizzabile esclusivamente in combinazione con shared_ptr . Ha anche un piccolo sovraccarico di memoria mentre restano alcuni puntatori deboli (una struttura sull'heap che tiene i conti forti e deboli).

Va bene usare i puntatori grezzi se puoi assicurarti della durata relativa del puntatore rispetto a cosa punta e prevenire il dereferenziamento il puntatore mentre pende .

I puntatori intelligenti sono strumenti per aiutarti (sotto il cofano usano puntatori grezzi).

Ad esempio unique_ptr imposta la durata dell'oggetto puntato come lo stesso puntatore con funzionalità extra per esplicito reset o release . L'impronta di memoria per un unique_ptr è la stessa di un puntatore raw a meno che non si usi un deleter stateful.

    
risposta data 16.06.2014 - 14:59
fonte
1

Un weak_ptr può effettivamente estendere la durata di un shared_ptr.

Per accedere a cosa fa riferimento a weak_ptr, devi chiamare lock () su di esso. Questo temporaneamente lo aggiorna a shared_ptr. È quindi possibile utilizzare questo puntatore senza il pericolo che vada via mentre lo si utilizza. Non si ottiene tale garanzia quando si utilizzano puntatori nudi.

new, delete e raw pointers non sono completamente inutili. Questi sono gli elementi costitutivi su cui si basano gli indicatori intelligenti!

    
risposta data 16.06.2014 - 14:59
fonte

Leggi altre domande sui tag