[英]Using dynamic memory allocation with C++ Libraries
我正在尝试使用Alglib的样条函数,为此,我必须使用我的数据初始化一个数组并将其传递给Alglib的样条函数。
我不断得到n_c必须是一个恒定的错误。 有没有办法解决? 我已经在使用矢量积分了。 建立样条线时,尺寸不会改变。
void Connector::UniformSpacing(int n)
{
double arcL = Length();
double ds = arcL / ((double)n);
static const int n_c = points.size();
alglib::real_1d_array x[n_c]; // Error here, n_c is still not a constant
alglib::spline1dbuildcubic()
}
仅仅因为变量是堆栈上的static const
对象,并不意味着它是编译时常量:变量在运行时在首次调用该函数时初始化。 但是,对于内置数组,大小需要在编译时知道。 您可以将其设为constexpr
在这种情况下,除非可以在编译期间确定初始化,否则编译器将拒绝编译初始化。
使用运行时大小的最简单方法是使用
std::vector<alglib::real_1d_array> x(n_c);
对于这种类型,不必在编译时知道大小。
n_c必须是编译时间常数。
如果需要只能在运行时指定其大小的数组,则需要使用无数动态可调整大小的结构之一。 根据是否要将此新分配的数组的所有权传递给调用库,请使用以下两种结构之一:
std::unique_ptr<alglib::real_1d_array[]> x(new alglib::real_1d_array[n_c]);
libfunc
)-您将在unique_ptr
上调用release
,并按如下所示进行调用: libfunc(x.release())
。 libfunc(x.get())
。 当然,在“保留所有权”的情况下,假设是该库不会释放此内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.