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



我使用的函数的输入之一是"void*fdata"。我定义了一个名为data2的结构,并可以通过使用&alldata2,其中alldata2是在data2下定义的结构变量的名称。

我的问题是如何将f(…,void*fdata,…)中的intput强制转换为函数f主体中的智能指针?函数f在一个循环中,我还在循环中使用了"#pragma omp parallel for The num_threads(3)"。

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

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

但该程序似乎存在内存泄漏,我怀疑这是由函数f的递归求值中创建的dp2引起的。如有任何帮助,我们将不胜感激!我正在使用Visual Studio 2012学习版。

我尝试过但不起作用的一些方法包括:

  1. 在函数中,写入

    data2*dp2=新数据2()
    dp2=(data2*)(fdata);

然后在"return"命令之前删除dp2。

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新