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

    [c++]visibilita puntatore

    CIao.
    Ho questo problema:
    Instanzio una classe col new e la metto in uno stack cosi:

    [code]
    CIfcProject m_root = new CIFcProject();
    CObserverIfc* pElement = (CObserverIfc*)new CIfcOwnerHistory(strId, strRef);
    m_Subject->StackIfc.push(pElement);
    [code]

    poi assegno in una funzione il puntatore a pElement ad un altro puntatore che all inizio è null
    cosi:

    codice:
    class CIfcProject
    {
    .
    public:
    .
    private:
    CObserverIfc* m_pObserverIfc;
    .
       void setPointer(CObserverifc* pData)
       {
           m_pObserverIfc = pData;//in questo modo vorrei copiare l'indirizzo di pData in
           //ObserverIfc
       }
       CObserverIfc* getData()
       {
         return m_pObserverIfc;
       }
    }
    fino qui tutto è corretto , ma se vado nel distruttore della classe base e prima di fare qualsiasi cosa provo a fare:
    codice:
      CObserverIfc pObs = m_root->getData();
    mi ritorna un valore NULL e non lo era!!!!.
    E' una cosa che non sono riuscito a capire a fondo ,se tolgo da qualsiasi mappa o array o contenitore in genere che lo contiene quanto resiste un puntatore dopo essere instanziato ?
    Ha la visibilità della funzione?
    è questo lo heap o zona di memoria in cui vengono messi i punttori ad oggetto?
    scusate se sono domande banali , ma voglio colmare alla svelta questa lacuna che mi porto dietro da tanto , forse per aver fatto tutto per esperienza e mai letto un buon libro sul c++
    (adesso sto leggendo thinking c++ se volete consigliarmi un capitolo di qualche libro...)
    chiedo ...
    ciao.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Un puntatore segue le normali regole di visibilità come ogni altra variabile.
    E' quello a cui punta che sopravvive e che andrà deallocato prima o poi.
    Oltre a questo, quale sarebbe la classe base?
    La getData() è dichiarata virtual in quella classe?
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    la classe base che contirne tutto si chiama CIFCXml , mentre la getData non è dichiarata virtual , è una funzione normale che ritorna un puntatore.
    Aggiungo che non effettuo neanche un delete , e che assegno pari pari un puntatore ad un oggetto ad un altro puntatore.
    Come mai l'oggetto mi sparisce?
    quali potrebbero essere le cause o i miei errori possibili?
    grazie shodan.

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    E dove e quando esegui l'istruzione rossa (o fac simile, visto che è privata)?
    codice:
       CIfcProject m_root = new CIFcProject();
       CObserverIfc* pElement = (CObserverIfc*)new CIfcOwnerHistory(strId, strRef);
       m_Subject->StackIfc.push(pElement);
       ...
       m_root->setPointer(pElement); 
       ...
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    scusa shodan , adesso non sono al lavoro e non ho il sorgente davanti domani provo a postarti il codice corretto.
    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.