我正在使用「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。
我做過嘗試,但不工作的一些方法包括:
在功能上,寫
數據2 * DP2 =新數據2();
dp2 =(data2 *)(fdata);
並在稍後「返回」命令之前刪除dp2。
的std ::的unique_ptr * DP2(的static_cast(FDATA))
除非你在處理C接口,不要使用'void *'。如果你不能使用模板並且想要刪除類型信息,你可以使用'std :: shared_ptr' –
2014-10-28 02:25:59
re <<使用帶有「void * fdata」>>的函數,爲什麼?這通常不是一個好主意。機智,你有問題。 – 2014-10-28 02:27:24
'std :: unique_ptr dp2(reinterpret_cast (fdata));' –
Brandon
2014-10-28 02:38:39