这是将 boost::scope_ptr 与数组一起使用的正确方法吗?

Is this the correct way to use the boost::scope_ptr with array?

由于 boost::scoped_ptr 不适用于 [] 索引运算符,我正在尝试使用这样的解决方法

{
    boost::scoped_ptr<float> data_ptr;
    float *data = new float(SIZE);
    data_ptr.reset(data);
    ...
}

稍后会释放数组吗?有更好的方法吗?

float *data = new float(SIZE);

此行动态分配单个 float 并将其初始化为 SIZE,它不是分配 SIZE 元素的数组。您显示的代码具有明确定义的行为,但显然不是您想要的。

动态分配数组使用

float *data = new float[SIZE];
//                     ^    ^
// use "new float[SIZE]()" if you want to zero initialize all the elements

但是,如果您这样做,您的代码现在具有未定义的行为,因为 scoped_ptr 将调用 delete 来销毁数组,但是因为使用 new[] 分配了内存,您需要delete[] 改为调用。解决方案是使用 boost::scoped_array.

{
    boost::scoped_array<float> data_ptr(new float[SIZE]);

    data_ptr[0] = 0;  // array indexing works too
    ...
}  // delete[] will be called to destroy the array