Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C++] Uso intelligente del distruttore

    Ciao,
    vi descrivo il mio problema: ho tanti oggetti dello stesso tipo, che per chiarezza chiamo A, che al loro interno, oltre a puntatori ad array allocati dinamicamente, hanno un puntatore ad una struttura dati condivisa B.

    Non riesco a scrivere un distruttore per eliminare questi oggetti A in modo intelligente e lasciare intatta la struttura condivisa B.

    La mia soluzione (sbagliata) prevede di chiamare, nel distruttore di A, la delete solo sui puntatori degli array dinamici.
    Il mio problema è che quando tento di cancellare un array di oggetti di tipo A, a runtime mi viene fuori un Abort

    E' sbagliata l'interpretazione dell'uso del distruttore????

    In attesa di una risposta grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Mi sono perso ...

    Giusto fare la delete di cio' che hai allocato dinamicamente ... ma non vedo piu' B nel tuo ragionamento ...

    Per quanto riguarda l'errore, che intendi con un "Abort"?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Grazie per la risposta

    Allora ho implementato il distruttore dell'oggetto di tipo A con la speranza di non cancellare la struttura dati B. Quando uso il tipo A, per come è il mio algoritmo, mi ritrovo a cancellare un vettore di oggetti di tipo A. Quando tento di farlo, mi cancella il primo oggetto del vettore (lo vedo perchè ho un cout nel distruttore) e poi mi da un' abort a runtime.

    Non conosco le cause dell'abort. Penso sia causato dal tentativo di cancellazione del secondo elemento. Ho pensato inoltre che se fosse così, il problema potrebbe essere che con il primo oggetto sia stata concellata anche la struttura B.

  4. #4
    provo a postare un po' di codice
    codice:
    Bicluster *b = new Bicluster[2];
    b[0] = Bicluster(&m, 0);
    b[1] = Bicluster(&m, 1);
    
    delete [] b;
    Dove com &m è la mia struttura dati condivisa. Quando cancello il vettore mi viene fuori

    Deleting bicluster #0
    Deleting bicluster #1
    Deleting bicluster #1
    Aborted

    Ora Deleting bicluster# è una stampa dentro il construttore. La cosa strana è che ho solo due elementi nel vettore ed ho tre stampe e poi l'abort

  5. #5
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    bè intanto posta il codice del distruttore di a e le 2 strutture..

    cmq se la struttura b è condivisa allora dovrebbe almeno avere un contatore di riferimenti per sapere se è possibile deallocarla o meno..
    nel distruttore di a decrementi il contatore e se è 0 deallochi sennò metti solo a null il 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 © 2024 vBulletin Solutions, Inc. All rights reserved.