由于boost :: scoped_ptr不能与[]索引操作符一起使用,我试图像这样做一个解决方法
{
boost::scoped_ptr<float> data_ptr;
float *data = new float(SIZE);
data_ptr.reset(data);
...
}
稍后会释放数组吗?有更好的方法吗?
答案 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[]