Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    32

    [C++]gestione risorse classi costruttori

    salve a tutti.Chiedo una mano a risolvere un esercizio che probabilmente mi aiuterà a risolverne a catena tanti altri.

    Ecco il testo :

    Discutere brevemente se, e sotto quali condizioni, le seguenti classi si comportano correttamente
    dal punto di vista dell’allocazione delle risorse (si noti che quella mostrata `e da considerarsi
    l’implementazione completa delle classi in questione).

    codice:
    #include <vector>
    
    
    template <typename T>
    class A {
    private:
      int i;
      T* p;
      double d;
    
    public:
      A() : i(), p(new T), d() {}
      ~A() { delete p; };
    };
    
    
    
    template <typename T>
    class B {
    private:
      int i;
      T* p;
      double d;
      
      B(const B&);
      B& operator=(const B&);
    
    public:
      B() : i(100), p(new T[i]), d() {}
      ~B() { delete[] p; };
    };
    
    class C : private A<std::vector<int> > {
    private:
      B<double> b1;
      B<int> b2;
      
      C(const C&);
      C& operator=(const C&);
    
    public:
      C() {}
    };
    Aiutatemi per favore,dopodomani ho l'esame,e trovare i peli nel codice già scritto non mi va a genio proprio

    Ho notato che manca il distruttore virtuale nella classe A,madre di C,che nella lista di inizializzazione dei costruttori trovo dei new che a occhio non mi piacciono tanto perchè potrebbero dare errore e quindi questo non viene gestito,ma potrei sbagliarmi sulla valutazione

  2. #2
    Usa i tag code, già il codice con i template è illeggibile di suo, se poi non c'è neanche l'indentazione...
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    32
    grazie per le indicazioni sull'utilizzo delle funzionalità del forum,è una delle mie prime discussioni.
    Adesso penso vada bene come indentatura,non penso sia troppo come codice per cui magari è difficile trovare gli errori,sono proprio io che sono cecato di brutto,ne sono sicuro

  4. #4
    Intravedo almeno i seguenti problemi:
    1. il distruttore della classe A non e' virtuale;
    2. sempre nella class A, viene permesso l'utilizzo del costruttore di copia e dell'operatore d'assegnamento: andrebbe impedito a livello di compilazione (come avviene per B e C), oppure andrebbero ridefiniti in modo da gestire la copia della risorsa membro p.
    3. i distruttori di A e B possono rilanciare eccezioni e nel caso esse vengano lanciate mentre vengono eseguiti (i distruttori delle classi A e B) a causa di eccezioni (unwinding stack), l'applicazione irrimediabilmente terminerebbe la sua esecuzione.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    32
    ok,ti ringrazio MaCAPP,come dicevo sul primo allora avevo visto giusto,su secondo e terzo punto no proprio.
    Per il secondo e terzo sei stato utilissimo,ti ringrazio per l'aiuto datomi
    Mi vado a riguardare la sezione sull'inizializzazione alla luce di queste ultime delucidazioni

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.