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

时间:2015-03-04 15:15:50

标签: c++ boost boost-smart-ptr

由于boost :: scoped_ptr不能与[]索引操作符一起使用,我试图像这样做一个解决方法

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

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

1 个答案:

答案 0 :(得分:1)

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[]分配了内存,你需要{{ 1}}来代替。解决方案是使用boost::scoped_array

delete[]