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

    [C++] allocazione dinamica

    ciao,
    con c++ sono agli inizi.
    che differenza c'è tra le 2 classi che seguono dal punto di vista dell'allocazione?

    class A{
    public:
    std::string x;
    };

    class B{
    public:
    std::string* x;
    };

    A* a = new A();
    B* b = new B();

    Il fatto che a->x non è dichiarato come puntatore significa che non verrà allocato nello heap, sebbene A stia nello heap? Oppure il fatto che 'a' è allocato nello heap determina che tutti i suoi membri saranno allocati nello heap automaticamente?

    Inoltre. Se invece di due classi uso 2 strutture, valgono le stesso considerazioni?

    grazie

  2. #2
    Ciao, provo a risponderti.
    La classe A alloca un area di memoria per la variabile X quando viene creata ( A* a = new A() ) e questa area contiene il valore che andrai a mettere nella variabile X.
    La classe B alloca un area di memoria per la variabile X quando viene creata ( B* b = new B() ) e questa area contiene solo l' indirizzo di memoria usabile per andare a trovare il contenuto che andiamo a mettere nella variabile X.
    Quindi durante l'allocazione in memoria fatta dalla "new", la classe A alloca (oltre a vari dati di organizzazione) la variabile X come area dove mettere un insieme di caratteri (il valore della stringa). In questo caso molto particolare si tratta di un dato che teoricamente non ha una lunghezza stabilita (string appunto) quindi sarà grande un certo valore n che non so (penso dipenda dal compilatore, teoricamente infinito ma praticamente no); se invece fosse stato un dato comune di lunghezza definita tipo INT, la spiegazione si sarebbe già conclusa (INT è 32 bit).
    Durante l'allocazione di memoria della classe B tu allochi invece una variabile indirizzo (normalmente è grande 32 bit) che si riferirà ad un dato string (quando lo creerai) e non l' intera variabile X.
    La classe B quindi conterrà uno spazio vuoto che tu alimenterai con l' indirizzo dell' oggetto string (esistente o che creerai in seguito).

    La struttura ha un comportamento analogo alle classi per quanto riguarda le variabili interne, quindi valgono le stesse considerazioni.

    Spero di esserti stato di aiuto.
    Ciao!

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.