У меня есть класс, содержащий переменную-член вектора. Я знаю, что векторы, хранящиеся в стеке, будут очищены (т.е. свободны от памяти), когда они выходят из области , но я не уверен, что уничтожение объекта класса - который содержит переменную-член вектора - считается выходящим из сферы действия.C++ удаление элемента класса элемента в деструкторе
Если это не так, то подходящий способ уничтожить вектор?
EG:
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?
}
}
Увидев, как он помечен C++, вы, вероятно, хотите 'new/delete' над' malloc/free'. – chris
вектор в порядке. Но 'stuff' не безопасен из-за конструктора копирования и оператора присваивания (потому что компилятор автоматически сгенерирует их). См. Правило три (или пять в C++ 11). –
В новом мире, C++ 11-land, вы больше не называете 'delete' себя. Вы используете unique_ptrs (обычно) или shared_ptrs (редко), чтобы позвонить ему для вас. – David