Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]delete e puntatori

    ciao.
    ho il seguente codice:

    tagLoadData* td;
    td=pType->m_TagsLoadData[j];(pType=*CSapLoadType
    pLoadDataArray->Add(td);
    delete td;
    vorrei eseguire l'operatore delete per liberare dalla memoria il td in pType->m_TagsLoadData[j], ma essendo un puntatore facendo il delete mi cancella anche il td in ploaddataarray.
    E' un importazione di molti dati e vorrei cancellare dalla memoria i dati importati mano a mano che vengono immessi nell'array.
    Per fare questo pero devo inserire una copia dei dati in pLoadDataArray->Add(td);
    non il riferimento.

    pLoadDataArray è del tipo CTypedPtrArray<CPtrArray, tagLoadData*> * pLoadDataArray)
    struct tagLoadData
    {
    double dLen;
    bool bNew; //nuovo pto di carico
    }
    class CSapLoadType
    {


    public:
    CSapLoadType();
    virtual ~CSapLoadType();
    tagLoadData* getByID(int ID);
    public:
    CTypedPtrArray<CPtrArray, tagLoadData*> m_TagsLoadData;

    };
    Ho letto qualcosa su costruttori di copia è questo il caso?
    In questo caso pero' dovrei copiare una struttura ,non un tipo(o una serie di tipi) primitivo.
    Grazie.

  2. #2

    Re: [c++]delete e puntatori

    Originariamente inviato da giuseppe500
    ciao.
    ho il seguente codice:

    tagLoadData* td;
    td=pType->m_TagsLoadData[j];(pType=*CSapLoadType
    pLoadDataArray->Add(td);
    delete td;
    vorrei eseguire l'operatore delete per liberare dalla memoria il td in pType->m_TagsLoadData[j], ma essendo un puntatore facendo il delete mi cancella anche il td in ploaddataarray.
    Non puoi rimuovere pType->m_TagsLoadData[j]?

    Considera che facendo delete td, stai invalidando oltre il puntatore acquisito da pLoadDataArray->Add(td), anche quello che non hai rimosso da pType->m_TagsLoadData[j].

  3. #3

    Re: [c++]delete e puntatori

    [b]
    ...
    Ho letto qualcosa su costruttori di copia è questo il caso?
    ...
    no, il costruttore di copia è

    codice:
    class foo {
      public:
        foo(foo &);
    }
    ciao
    sergio

  4. #4

    Re: Re: [c++]delete e puntatori

    Originariamente inviato da mondobimbi
    no, il costruttore di copia è

    codice:
    class foo {
      public:
        foo(foo &);
    }
    ciao
    sergio
    Codice PHP:
    class foo {
      public:
        
    foo(const foo &);
    }; 

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    Grazie.
    Un ultima cosa , perchè si esegue il delete di classe*puntatore(pClassA* pObj) e non di classe(ClassA Obj) oggetto?
    Cosa cambia a livello di compilatore?
    Grazie.

  6. #6
    Originariamente inviato da giuseppe500
    Grazie.
    Un ultima cosa , perchè si esegue il delete di classe*puntatore(pClassA* pObj) e non di classe(ClassA Obj) oggetto?
    Cosa cambia a livello di compilatore?
    Grazie.
    delete opera solo sui puntatori. "ClassA Obj" non è 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 © 2025 vBulletin Solutions, Inc. All rights reserved.