在 FFTW3 中使用智能指针
Using Smart Pointers With FFTW3
在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 库一起使用?
我建议在此上下文中谨慎使用共享指针。是的,您可以提供指向 FFTW 规划功能的原始指针(详情如下)。但是,这不会增加共享指针的引用计数器。这是有问题的,因为 FFTW 计划会知道内存, 但 共享指针认为没有人需要内存,因此可以调用删除器。你会遇到段错误。
共享指针没有到原始指针的隐式转换,您需要使用“.get()”方法。 IE。
p = fftw_plan_dft_1d(N, in.get(), out.get(), FFTW_FORWARD, FFTW_ESTIMATE);
但不要这样做
在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 库一起使用?
我建议在此上下文中谨慎使用共享指针。是的,您可以提供指向 FFTW 规划功能的原始指针(详情如下)。但是,这不会增加共享指针的引用计数器。这是有问题的,因为 FFTW 计划会知道内存, 但 共享指针认为没有人需要内存,因此可以调用删除器。你会遇到段错误。
共享指针没有到原始指针的隐式转换,您需要使用“.get()”方法。 IE。
p = fftw_plan_dft_1d(N, in.get(), out.get(), FFTW_FORWARD, FFTW_ESTIMATE);
但不要这样做