У меня есть код C++. Так как память динамически распределена, она должна быть выделена в кучу. Или, поскольку память была выделена прямо во время объявления, а не в каком-либо конструкторе, выделяется ли она на стек? И нужен ли мне де-конструктор для освобождения памяти?Где выделена эта память - куча или стек?
class param{
public:
char* st = new char[256];
};
Что происходит в следующем сценарии? Я предполагаю, что это выделено на стек, и его не нужно освобождать с помощью деконструктора.
class param{
public:
char st[256];
};
Третий способ написать это как:
class param{
public:
char* st;
param()
{
st = new char[256];
}
~param()
{
delete[] st;
}
};
Какой из этих трех правильный способ сделать это?
Запуск первой версии против valgrind указывает на утечку памяти, поэтому она выделяется в куче. Вам нужно будет удалить это место вручную позже, и это будет довольно слабым. Правильный способ - это либо второй, либо третий способ. Для третьего способа убедитесь, что вы предоставили подходящую (или удалили) копию и переместили конструкторы и операторы присваивания, чтобы обеспечить правильное обращение с памятью. –
На самом деле ни один из них не имеет никакого смысла. Используйте 'std :: vector' или' std :: array'. –