2012-09-01 60 views
1

我有這樣的功能:這是內存泄漏嗎? (C++ BSTRs)

bool Function (BSTR paramter1, BSTR parameter2) 
{ 
    // My Code 
} 

這我打電話是這樣的:

Function(SysAllocString(L"Example1"), SysAllocString(L"Example2")); 

我的理解是,我與SysAllocString分配必須SysFreeString被釋放。

BSTR似乎是typedef OLECHAR *BSTR;

引擎蓋下一個typedef由於這是一個指針,我應該沒事,只要我添加

SysFreeString(parameter1); 
SysFreeString(parameter2); 

Function,不命名BSTR s。

我在這裏的所有推理是否正確,只要我添加這兩行,我不會泄漏內存?我仍然有很多東西需要學習。非常感謝您的寶貴時間。

+2

是的,這是一個泄漏。很容易找到自己,只需運行這個代碼十億次。考慮_bstr_t或CComBSTR,自動執行它的包裝。 –

回答

4

是的,你是對的。但這通常不是設計軟件的適當方式。一般來說,釋放對象的責任轉到分配它的例程或一些相關例程。你應該可以通過調用Function來獲得不需要立即釋放的參數,或者使用本地聲明的參數而不是在堆上分配的參數。

+0

一個很好的解決方法是創建自己的'SysAllocString'函數,該函數返回一個在銷燬時調用'SysFreeString'的對象實例。 –

+2

這就是'auto_ptr'的用途。 – Barmar

+0

是的,這可能是最簡單的方法。 –