C ++ обработка указателей - PullRequest
0 голосов
/ 26 марта 2012

Предположим, я создаю форму, используя указатель, и эта форма содержит вложенный элемент в качестве другого указателя. Когда я удаляю форму, я выполняю операцию удаления основного указателя, нужно ли мне также выполнять операцию удаления для вложенного указателя или компилятор делает это самостоятельно?

Ответы [ 3 ]

4 голосов
/ 26 марта 2012

Если вы выделяете память для указателя, да, вам нужно явно освободить всю память, которую вы выделяете.

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; }
};

Вы должны прочитать об умных указателях, они могут лучше подойти для вашего случая.

0 голосов
/ 26 марта 2012

Этот вопрос зависит от того, как написан деструктор для формы. Например, форма может попытаться вызвать деструктор для субформы. Если он выполняет такую ​​очистку, вам не нужно дополнительно освобождать форму. Было бы полезно узнать, о какой системе управления формами вы говорите (например, MFC).

0 голосов
/ 26 марта 2012

Да, вам обычно нужно явно удалить это, чтобы избежать утечки памяти. Простое правило: если вы использовали new для его выделения, вам потребуется соответствующий delete для его освобождения.

Тем не менее, вы обычно хотите использовать что-то вроде интеллектуального указателя, который обрабатывает все это автоматически.

...