Если я не использую new
для распределения элементов данных класса, существует ли какая-либо очистка, которая должна быть выполнена в деструкторе? Например, в следующем случае мне понадобится delete
вектор? Или это зависит от MyType
?Нужно ли мне очищать элементы данных, отличные от указателей?
class A {
A();
~A();
MyType x;
std::vector<MyType> v;
};
A::A() {
x = MyType(42);
v = std::vector<MyType>(5);
}
A::~A() {
// what goes here?
}
В этом конкретном случае нет необходимости в dtor. Просто имейте в виду, что «R» в «RAII» означает * ресурс *, а не * память *. Иногда вам нужно выпустить что-то другое, кроме памяти в dtor. –
@JohnDibling, но эта (по крайней мере вторая часть) основана на предположении, что ресурсы освобождаются, когда их отдельные владельцы уничтожаются. Поэтому, если 'MyType' приобретает ресурс и освобождает его в своем деструкторе, все в порядке. –
Да, я больше делал этот комментарий для будущих читателей. :) –