如果我想從函數返回一個指針,什麼會更好,更安全?哪種方法更好,更安全?
void pro_register_application(WNDCLASS* wc); /* use wc in function */
或
WNDCLASS* pro_register_application(void)
{
WNDCLASS* wc = malloc(sizeof(WNDCLASS));
...
return wc;
}
如果我想從函數返回一個指針,什麼會更好,更安全?哪種方法更好,更安全?
void pro_register_application(WNDCLASS* wc); /* use wc in function */
或
WNDCLASS* pro_register_application(void)
{
WNDCLASS* wc = malloc(sizeof(WNDCLASS));
...
return wc;
}
只要你適當地doccument緩衝區的所有權的細節正在處理兩者是相同的,哪一個選擇取決於選擇的問題。
第二個樣本的用戶需要清楚地告訴緩衝區的所有權轉移給他們,因此是釋放緩衝區的責任。
如果你選擇讓你的函數創建一個數據結構並返回一個指針(你的第二種方式,在那裏),調用者必須知道你如何爲它分配空間......你是否使用了malloc()或GlobalAlloc()或其他機制?...然後使用相應的方法來擺脫這個事情。這足以讓我的客戶分配空間並傳遞一個指針,這是我的想法。
也就是說,如果他們採取適當的措施正確釋放內存,我不會殺死任何人使用任何一種方法。
這是COM對象有用的原因之一 - 客戶端不必知道對象是如何創建的,只需在完成時調用Release()。