2012-04-19 144 views
1

如果我想從函數返回一個指針,什麼會更好,更安全?哪種方法更好,更安全?

void pro_register_application(WNDCLASS* wc); /* use wc in function */ 

WNDCLASS* pro_register_application(void) 
{ 
    WNDCLASS* wc = malloc(sizeof(WNDCLASS)); 
    ... 
    return wc; 
} 

回答

3

只要你適當地doccument緩衝區的所有權的細節正在處理兩者是相同的,哪一個選擇取決於選擇的問題。

第二個樣本的用戶需要清楚地告訴緩衝區的所有權轉移給他們,因此是釋放緩衝區的責任。

1

如果你選擇讓你的函數創建一個數據結構並返回一個指針(你的第二種方式,在那裏),調用者必須知道你如何爲它分配空間......你是否使用了malloc()或GlobalAlloc()或其他機制?...然後使用相應的方法來擺脫這個事情。這足以讓我的客戶分配空間並傳遞一個指針,這是我的想法。

也就是說,如果他們採取適當的措施正確釋放內存,我不會殺死任何人使用任何一種方法。

這是COM對象有用的原因之一 - 客戶端不必知道對象是如何創建的,只需在完成時調用Release()。