在fftw3 documentation中,标准示例为:
#include <fftw3.h>
...
{
fftw_complex *in, *out;
fftw_plan p;
...
in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
...
fftw_execute(p); /* repeat as needed */
...
fftw_destroy_plan(p);
fftw_free(in); fftw_free(out);
}
以下语法也适用:
#include <fftw3.h>
{
fftw_complex *in, *out;
fftw_plan p;
...
in = new fftw_complex[N];
out = new fftw_complex[N];
p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
...
fftw_execute(p); /* repeat as needed */
...
fftw_destroy_plan(p);
delete [] in;
delete [] out;
}
我想改用智能指针,也许像这样:
#include <fftw3.h>
...
{
fftw_plan p;
...
auto *in = std::make_shared<fftw_complex[N]>();
auto *out = std::make_shared<fftw_complex[N]>();
p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
...
fftw_execute(p); /* repeat as needed */
...
}
但是我似乎无法弄清楚语法。有没有人将智能指针与FFTW3库一起使用?
答案 0 :(得分:1)
在这种情况下,我建议谨慎使用共享指针。是的,您可以给FFTW规划功能一个原始指针(详细信息如下)。但是,这不会将引用计数器增加到共享指针。这是有问题的,因为FFTW计划会知道内存,但但是共享指针认为它没有人需要内存,因此可以调用删除程序。您会遇到段错误。
共享指针没有对原始指针的隐式转换,您想使用'.get()'方法。即
p = fftw_plan_dft_1d(N, in.get(), out.get(), FFTW_FORWARD, FFTW_ESTIMATE);
但是不要这样做