Если вы выделяете память для указателя, да, вам нужно явно освободить всю память, которую вы выделяете.
struct A
{
};
struct B
{
A* a;
B() { a = new A; }
~B();
};
B* b = new B;
delete b;
//you will have a memory leak here, since the memory pointed to by b.a
//is not released
Правильный способ освобождения памяти в деструкторе:
struct B
{
A* a;
B() { a = new A; }
~B() { delete a; }
};
Вы должны прочитать об умных указателях, они могут лучше подойти для вашего случая.