boost :: ptr_vector с массивами: могу ли я быть уверен, что его деструктор вызывает delete [] вместо delete? - PullRequest
3 голосов
/ 17 февраля 2012

У меня есть следующий случай:

boost::ptr_vector<float> vec;

float* array = new float[4]();
vec.push_back(array);

// Add some more elements to vec..

Как я могу гарантировать, что если я выйду из этой области и vec будет уничтожен, деструктор ptr_vector вызывает delete[], а не delete для каждого элемента vec. Я не понимаю, как это должно работать, потому что параметр шаблона float будет одинаковым для float* и float[4].

Ответы [ 2 ]

3 голосов
/ 17 февраля 2012

Можно указать для параметра CloneAllocator шаблона ptr_vector значение, отличное от значения по умолчанию, heap_clone_allocator. Невозможно создать экземпляр фактического класса boost::ptr_vector<float>, использующего delete[] вместо delete.

0 голосов
/ 17 февраля 2012

Для массивов, содержащих встроенные элементы простого типа (например, float или char): я думаю, что нет разницы между delete и delete [], потому что delete [] предполагает вызов многих деструкторов - для каждого объекта массива, но встроенные примитивные типы не предполагают вызова деструктора - там нечего разрушать; освобождение массива с плавающей точкой - это просто освобождение твердой части памяти без выполнения какого-либо кода, который может быть помещен в какой-то деструктор. Мурр ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...