2012-04-19 84 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()。