Предположим, у меня есть самостоятельно определить вектор класса и деструктор вектора класса определяется, как показано ниже,Деструктор по умолчанию для указателей?
~vector(void) {
for (uint64_t i = 0; i<len_elem; i++) { //destruct each elem
front[i].~T();
}
::operator delete(head);
head = nullptr;
capacity = 0;
}
В моем понимании, это деструктор отлично работает в большинстве случаев. Однако, если вектор равен vector<vector*> myVec
, правильно ли будет выполняться код в деструкторе? Чтобы быть конкретным, правильно ли вызовет дескриптор векторного класса front[i].~T();
?
Одним словом: нет. Что касается «правильного» или нет, это зависит от варианта использования. –
Указатели не имеют деструкторов, но вы можете вызвать деструктор на объект с помощью указателя (используя оператор 'delete'). –