我有以下情况:
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[4]
的模板参数float将是相同的。
答案 0 :(得分:3)
您可以将CloneAllocator
ptr_vector
模板参数指定为默认值heap_clone_allocator
以外的其他参数。无法使实际类boost::ptr_vector<float>
的实例使用delete[]
而不是delete
。
答案 1 :(得分:-4)
对于数组containsint BUILT-IN简单类型项(如float或char):我认为delete和delete []之间没有区别,因为delete []假定为数组的每个对象调用许多析构函数,但是内置基元类型不会假设调用析构函数 - 没有什么可以在那里销毁;释放浮点数组只是释放实体内存而不执行任何可能放在某种析构函数中的代码。穆尔...