我有以下情况:
boost::ptr_vector<float> vec;
float* array = new float[4]();
vec.push_back(array);
// Add some more elements to vec..
我如何确保如果我离开这个范围,vec将被销毁?ptr_vector的析构函数在vec
的每个元素上调用delete[]
,而不是delete
。我不明白它应该如何工作,因为float*
和float[4]
的模板参数float是相同的。
您可以将ptr_vector
的CloneAllocator
模板参数指定为默认值heap_clone_allocator
以外的值。无法使实际类boost::ptr_vector<float>
的实例使用delete[]
而不是delete
。
对于包含内置简单类型项(如float或char)的数组:我认为delete和delete[]之间没有区别,因为delete[]假设为数组的每个对象调用多个析构函数,但内置基元类型不假设调用析构函数-没有什么可销毁的;释放浮点数组只是释放实体内存,而不执行任何可能放在某种析构函数中的代码。Murr。。。