Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [C++] distruttori

  1. #1

    [C++] distruttori

    Ciao a tutti,

    avrei un chiarimento da chiedere in merito alla gestione della memoria heap in C++.

    Io so che per ogni istruzione del tipo "Object* o = new Object(..)" deve corrispondere una "delete o", in modo che la memoria puntata da o venga liberata nell'heap.

    Mettiamo il caso che abbia creato una struttura dati (una list o un set) che contiene dei puntatori a vari oggetti creati (mediante "new") nel corso dello svolgimento di un programma. Nel momento in cui effettuo una chiamata del tipo "list.clear()" posso stare tranquillo che la memoria occupata dagli oggetti istanziati venga effettivamente liberata ? Oppure questa chiamata si limita ad azzerare solo i puntatori, quindi perdo i riferimenti agli oggetti puntati nell'heap e questa memoria è sprecata ?

    Grazie,
    Alessandro

  2. #2
    La seconda che hai detto. Per ottenere la liberazione automatica devi fare uso di smart pointers; usando gli smart pointers il tuo container sarà un container di smart pointers, che al momento della loro distruzione (che avviene, ad esempio, al list.clear()) si occupano di distruggere gli oggetti da loro puntati.
    Dai un'occhiata agli smart pointers forniti dalla libreria Boost.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Io qui leggo la seguente frase

    "All the elements in the list container are dropped: their destructors are called, and then they are removed from the list container, leaving it with a size of 0."

    Significa che, benchè vengano richiamati i distruttori di quelli oggetti lo spazio occupato da questi nell'heap non viene comunque liberato ?

    Grazie

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    il distruttore viene chiamato su un oggetto.. non su un puntatore..

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.