2016-01-01 2 views
3

Как управлять массивом char buffer в Test.h?Должен ли я удалять массивы символов в .h файлах

test.h

class Test{ 
public: 
    Test(); 
    ~Test(); 

    char buffer[255]; 
}; 

Test.cc

#include "Test.h" 

Test::Test() 
{ 
} 

Test::~Test() 
{ 
    // Do I need to delete/free buffer? 
} 

Я понимаю, что когда new или malloc используются память должна быть выпущена с помощью delete или free().

Является ли массив char buffer выделенным в стеке для каждого экземпляра Test и поэтому его не нужно удалять?

+1

Вам не нужно удалять все, что не было возвращено из нового. – molbdnilo

+0

Обратите внимание, что информация «в заголовке» не принадлежит нигде в этом вопросе. – LogicStuff

ответ

5

Нет, вам не нужно его удалять. Поэтому вам не нужен деструктор (если у вас есть какой-то другой ресурс, который должен быть выпущен)

Правило простое: каждый память/объект, полученный с malloc/new/new[] должно быть освобождены/уничтожены один раз и только один раз с соответствующими free/delete/delete[]. Не меньше. Больше ничего.

Кроме того, в современном C++ вам редко приходится управлять ресурсами памяти, подобными этому. Вы должны использовать std::vector или другой контейнер, или если вам действительно нужны указатели, вы должны использовать интеллектуальные указатели, std::unique_ptr и std::shared_ptr.

2
Is the char array buffer allocated on the stack for 
each instance of Test and so does not need to be deleted? 

Поскольку char buffer[255] является простым массивом символов инкапсулируются в классе Test поэтому его срока службы привязанный с объектом Test класса, т.е. когда объект класса Test создаются, память для массива будет выделена и когда объект будет уничтожена память.

Следовательно, создавать ли объект класса Test на stack или heap (с использованием new), когда объект будет уничтожен (автоматически или с помощью delete), память, занимаемая массивом будет выпущен.

Смежные вопросы