ポインタをメンバにもってデストラクタで解放するクラスを作るときは基本的にこういうふうにしなきゃダメ
class A {
public:
 A() : c(nullptr) {}
 A(const A& a) : c(a.c ? new C(*a.c) : nullptr) {}
 virtual ~A() { if(c) delete c; }
protected:
 C* c;
}

ただポインタ値をコピーするだけの実装だとコピー発生すると同じポインタを持つオブジェクトが複数出来上がって同じポインタをコピー解放しようとすんの
それかコピーコンストラクタでコピー元の無効にしてやること
A(A& a) : c(a.c ) { a.c =nullptr;}
A(A&& a) : c(a.c ) { a.c =nullptr;}
A(const A& a) は削除