Деструктор указателя на массив - PullRequest
0 голосов
/ 26 января 2019

У меня есть указатель на строку

string* relatori;

и в конструкторе класса

Conference() : numMaxRel(10)
{
    relatori = new string[numMaxRel];
}

Это стандартный массив с указателем на первый элемент? Так что внутри destrcutor я должен сделать следующее?

Conference::~Conference()
{
    delete rel;
}

Ответы [ 2 ]

0 голосов
/ 26 января 2019

delete rel не может освободить память массива.Для этого вы должны использовать delete[] rel.Однако вы должны знать, что вы можете использовать контейнеры из стандартной библиотеки, которые выполняют управление памятью, например std::vector<string>.Это почти всегда должно быть предпочтительным способом.Вот так может выглядеть ваш класс (примечание: вам не нужен деструктор):

class Conference
{
public:
    Conference() : numMaxRel(10)
    {
        rel.reserve(numMaxRel);
    }

private:
    size_t numMaxRel;
    std::vector<std::string> rel;
};

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

0 голосов
/ 26 января 2019

для удаления всего массива, на который указывает, так как вы использовали [] для выделения

  delete []rel;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...