如果我想从函数返回指针,那会更好更安全吗?
void pro_register_application(WNDCLASS* wc); /* use wc in function */
或
WNDCLASS* pro_register_application(void)
{
WNDCLASS* wc = malloc( sizeof(WNDCLASS) );
...
return wc;
}
答案 0 :(得分:3)
只要你适当地记录了正在处理的缓冲区的所有权细节,它们都是相同的,选择哪一个取决于选择的问题。
第二个样本的用户需要清楚地告知缓冲区的所有权已转移给他们,因此解除分配的责任也是如此。
答案 1 :(得分:1)
如果你选择让你的函数创建一个数据结构并返回一个指针(你的第二种方式,那里),调用者必须知道你为它分配了空间...你是否使用了malloc(),或者GlobalAlloc()还是其他一些机制?...然后用相应的方法来摆脱这个东西。这就是让客户端分配空间并传入指针的充分理由。
也就是说,如果他们采取适当措施正确释放内存,我不会因为使用任何一种方法而杀死任何人。
这是COM对象有用的原因之一 - 客户端不必知道对象是如何创建的,只需要在完成时调用Release()。