2014-10-28 22 views
0

我正在使用「void * fdata」作爲其輸入之一的函數。我定義了一個名爲data2的結構,並且可以使用& alldata2將一個已定義的結構變量傳遞給該函數,其中alldata2是在data2下定義的結構變量的名稱。如何將函數輸入到C++中的智能指針?

我的問題是如何將f(...,void * fdata,...)中的輸入轉換爲函數f的主體中的智能指針?函數f在一個循環內,我也在循環中使用了「#pragma omp parallel for num_threads(3)」。

我可以在函數中使用下面的命令來創建一個原始指針,稱爲DP2,以alldata2:

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

但該計劃似乎有內存泄漏,我懷疑這是由創作DP2所致在函數f的遞歸評估中。任何幫助將不勝感激!我正在使用Visual Studio 2012 Express。

我做過嘗試,但不工作的一些方法包括:

  1. 在功能上,寫

    數據2 * DP2 =新數據2();
    dp2 =(data2 *)(fdata);

並在稍後「返回」命令之前刪除dp2。

  • 的std ::的unique_ptr * DP2(的static_cast(FDATA))

  • +0

    除非你在處理C接口,不要使用'void *'。如果你不能使用模板並且想要刪除類型信息,你可以使用'std :: shared_ptr ' – 2014-10-28 02:25:59

    +0

    re <<使用帶有「void * fdata」>>的函數,爲什麼?這通常不是一個好主意。機智,你有問題。 – 2014-10-28 02:27:24

    +0

    'std :: unique_ptr dp2(reinterpret_cast (fdata));' – Brandon 2014-10-28 02:38:39

    回答

    0

    我意識到我要的是能夠訪問的空隙的指針在所述內容函數f(...,void * fdata,...)。

    通過用((data2 *)(fdata))替換函數中的指針dp2,該程序不會創建指針。可能的與指針相關的內存泄漏問題消失了。

    再次感謝所有回覆的人:)