КонтекстDeallocating (и вызов деструктора) шаблон аргумент
Я пытаюсь реализовать свою версию класса std::vector
шаблона. Вектор содержит динамический массив шаблона аргумента T
:
_vec = new T[n];
Очевидно T
может быть любого типа, вообще, указатели, классы, примитивные типы. Когда один называть v.resize(4)
по вектору размера 6
он должен, очевидно, удалить последние 2 элементов динамического массива (без перераспределении массива) после this specification:
Если п меньше, чем текущий размер контейнера, содержимое сводятся к своим первым n элементам, удаляя их (и уничтожая их).
По разрушив я имею в виду, и я думаю, что средства библиотеки СТД, вызывая деструктор для объекта или просто deallocating пространство памяти, если это любой другой примитивный тип, включая указатели.
Вопрос: Возможно ли (и если да, как) уничтожить элементы шаблона в динамически распределенном массиве без освобождения и перераспределения его?
Что я пробовал? Ну, я искренне не знаю, с чего начать:
- По-видимому you shouldn't вызов
delete
на примитивных типов. - You can явно вызывает деструктор на объекте, но это не сработает, если
T
не является объектом. - Я думал о простом уменьшении внутреннего счетчика
_size
(так что в будущемpush_back
элементы будут перезаписаны), но это не сразу вызовет деструктор для объекта.
Для 'std :: vector', я уверен, что стандарт диктует, что вы используете функции' construct' и 'destroy' в распределителе, а не явно используете вызовы place-new и explicit-destructor-calls. – Mankarse
Вы правы, но если Jueecy делает это просто для удовольствия, распределители, вероятно, переборщит. – fredoverflow