【发布时间】:2014-10-28 02:22:41
【问题描述】:
我正在使用一个以“void* fdata”作为输入之一的函数。我定义了一个名为data2的结构体,可以通过&alldata2将定义的结构体变量传递给函数,其中alldata2是data2下定义的结构体变量的名称。
我的问题是如何将 f(..., void* fdata,...) 中的输入转换为函数 f 主体中的智能指针?函数 f 在一个循环中,我还在循环中使用了“#pragma omp parallel for the num_threads(3)”。
我可以在函数中使用以下命令创建指向 alldata2 的原始指针,称为 dp2:
double f(..., void* fdata, ...)
{
data2* dp2 = (data2 *)(fdata);
...
}
但该程序似乎存在内存泄漏,我怀疑这是由于在函数 f 的递归评估中创建 dp2 造成的。任何帮助将不胜感激!我正在使用 Visual Studio 2012 Express。
我尝试过但不起作用的一些方法包括:
-
在函数中写
data2* dp2 = new data2();
dp2 = (data2*)(fdata);
然后在“return”命令之前删除 dp2。
std::unique_ptr *dp2(static_cast(fdata))
【问题讨论】:
-
除非你在处理 C 接口,否则不要使用
void *。如果您不能使用模板并想删除类型信息,则可以使用std::shared_ptr<void>之类的东西 -
重新>,为什么?这通常不是一个好主意。也就是说,你遇到了问题。
-
std::unique_ptr<data2> dp2(reinterpret_cast<data2*>(fdata)); -
@BryanChen。谢谢!这可能是解决它的一种方法。稍后再试。
-
@Cheersandhth.-Alf 这只是将数据传递给函数的一种方式。
标签: c++ smart-pointers void-pointers