哪种方式更好,更安全?

时间:2012-04-19 15:59:40

标签: c function pointers

如果我想从函数返回指针,那会更好更安全吗?

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

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

2 个答案:

答案 0 :(得分:3)

只要你适当地记录了正在处理的缓冲区的所有权细节,它们都是相同的,选择哪一个取决于选择的问题。

第二个样本的用户需要清楚地告知缓冲区的所有权已转移给他们,因此解除分配的责任也是如此。

答案 1 :(得分:1)

如果你选择让你的函数创建一个数据结构并返回一个指针(你的第二种方式,那里),调用者必须知道你为它分配了空间...你是否使用了malloc(),或者GlobalAlloc()还是其他一些机制?...然后用相应的方法来摆脱这个东西。这就是让客户端分配空间并传入指针的充分理由。

也就是说,如果他们采取适当措施正确释放内存,我不会因为使用任何一种方法而杀死任何人。

这是COM对象有用的原因之一 - 客户端不必知道对象是如何创建的,只需要在完成时调用Release()。