мне нужно уничтожить строку в C ++ - PullRequest
4 голосов
/ 04 декабря 2010

если у меня есть строка в классе, то память выделяется. Должен ли я уничтожить строку в деструкторе? например,

class A {
  string Test;
  A() {
    Test = "hello world";
  }

  A(string &name) {
    Test = name;
  }

  ~A() {
    // do I have to destroy the string here?
  }
}

Я старый программист на c / c ++ (до stl) и возвращаюсь в c ++. Строка уничтожается автоматически с использованием некоторого шаблона магии?

ТИА, Dave

Ответы [ 4 ]

6 голосов
/ 04 декабря 2010

Да. Строки и контейнеры выделяют / освобождают для вас. ОДНАКО, контейнер указателей не освобождает то, на что указывают эти указатели. Вы должны сами пройти через них.

2 голосов
/ 04 декабря 2010

Вы не создаете указатель на строку, поэтому Test будет размещен в стеке (при условии, что объект A был размещен в стеке). Таким образом, когда он покидает область действия, он будет автоматически освобожден. Если бы Test был указателем, он был бы размещен в куче, и вам нужно было бы удалить его в деструкторе

2 голосов
/ 04 декабря 2010

Нет.Деструктор строки будет вызван, как только экземпляр A выйдет из области видимости.

0 голосов
/ 04 декабря 2010

Вы убираете беспорядок, а стандартная библиотека убирает беспорядок.Память, которую выделяет std :: string, - это беспорядок.

Поведение по умолчанию для деструктора - вызывать деструкторы для каждой базы и члена данных.Ваша строка является членом данных, поэтому вызывается ее деструктор.Его деструктор делает все, что нужно сделать здесь, так что больше нет необходимости (и на самом деле это было бы очень неправильно) что-либо здесь очищать, чем если бы у вас была строка в качестве локальной переменной в main ().

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