Вопрос по memory-management, c++, vector – c ++ удаление памяти члена векторного класса в деструкторе
У меня есть класс, содержащий переменную-член вектора. Я знаю, что векторы, хранящиеся в стеке, будут очищены (то есть свободны от памяти, d), когда они выходят из объем, но я не уверен, что уничтожение Объект класса - который содержит переменную-член вектора - считается выходящим за рамки.
Если это не так, каков подходящий способ уничтожить вектор?
НАПРИМЕР:
class fred {
char *stuff;
vector<int> v;
fred() : stuff(), v() {}
~fred() {
if (stuff) free(stuff);
// now how do I clear up the vector v? Will it be done automatically?
}
}
new/delete
надmalloc/free
.
chris
delete
сам. Вы используете unique_ptrs (обычно) или shared_ptrs (редко), чтобы вызвать его для вас.
David
stuff
не является безопасным из-за конструктора копирования и оператора присваивания (потому что компилятор сгенерирует их автоматически). Смотрите правило трех (или пять в C ++ 11).
Martin York
Вектор уже зачищен для вас! Когда класс разрушается, все его члены-деструкторы также называются. В этом случаеv
вызывается деструктор, который очищает все, что он выделил.
Нестатические элементы & apos; Dtors вызываются, когда вы достигаете закрытия}
деструктора в обратном порядке, в котором они были объявлены. Затем вызывается деструктор базового класса, если он есть.
Существует всегда ТОЛЬКО ОДИН способ уничтожить объект, и это с помощью его деструктора (напротив, вы можете создавать объекты несколькими способами). Контейнеры STL были разработаны специально, чтобы избежать такого микроуправления памятью в структурах данных. Если вам необходимо явно выделить или освободить память в контейнере STL, вы делаете это неправильно.