如何在c ++中将函数输入转换为智能指针?

时间:2014-10-28 02:22:41

标签: c++ smart-pointers void-pointers

我正在使用带有“void * fdata”的函数作为其输入之一。我定义了一个名为data2的结构,可以使用& alldata2将定义的结构变量传递给函数,其中alldata2是在data2下定义的结构变量的名称。

我的问题是如何将f(...,void * fdata,...)中的intput转换为函数f体中的智能指针?函数f在循环中,我在循环中使用了“#pragma omp parallel for num_threads(3)”。

我可以在函数中使用以下命令为alldata2创建一个名为dp2的原始指针:

double f(..., void* fdata, ...)
{
data2* dp2 =  (data2 *)(fdata);
...
}

但该程序似乎有内存泄漏,我怀疑它是由函数f的递归计算中的dp2的创建引起的。任何帮助将不胜感激!我正在使用Visual Studio 2012 Express。

我尝试但不工作的一些方法包括:

  1. 在函数中,写

    data2 * dp2 = new data2();
    dp2 =(data2 *)(fdata);

  2. 在“return”命令之前删除dp2。

    1. std :: unique_ptr * dp2(static_cast(fdata))

1 个答案:

答案 0 :(得分:0)

我意识到我想要的是访问函数f(...,void * fdata,...)中的void指针的内容。

通过用((data2 *)(fdata))替换函数中的指针dp2,程序可以在不创建指针的情况下工作。与指针相关的可能的内存泄漏问题已经消失。

再次感谢所有回复的人:)