在C/C++中有一个原则“谁申请谁释放”,那么下面的代码符合这个原则么?
char *fun()
{
char *result = malloc(100);
return result;
}
int main()
{
char *str = fun();
free(str);
}
这么写是不符合谁申请谁释放的。COM组件使用引用计数来避免这个问题,参考:
http://www.cnblogs.com/fangyukuan/archive/2010/06/06/1752621.html
不符合。应该主程序申请,将缓冲区指针传给函数,函数将结果填入。
例子:Windows API函数 GetWindowText,可以获取指定窗口的标题,函数原型
int WINAPI GetWindowText(
HWND hWnd,
LPTSTR lpString,
int nMaxCount);
很明显,除了传递需要获取的窗口句柄,剩下两个参数分别是缓冲区指针和缓冲区长度。
但是在C++中会有这种情况啊,比如一个工厂函数
Product *createProduct()
{
Product *p = new Product;
return p;
}
那这个肯定是要由调用方来负责释放啊。。。
还需要定一个release函数,然后它来释放malloc分配的指针
我怎么感觉是可以的。。。。。。。。。。。上面大家都说不可以。。
“谁申请谁释放” 这个“原则”,我的理解是那一个**模块/对象**申请的,就由那一个**模块/对象**来释放。能解决不同库中重载new方法导致的问题等。
楼主的代码中, 申请内存的是一个全局函数,如果是有精神洁癖的,当然可以写一个全局函数来释放内存,但是在main函数里面释放,也未尝不可。
不可以,函数是不允许返回局部变量的地址的