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