概述
对于返回内存地址的函数设计有三种设计模式:
- 函数定义内存不确定,函数调用者不free
- 函数定义allocate,函数调用者free
- 函数调用者allocate,函数调用者free
注:函数定义对函数调用者是透明的
应用
函数定义内存不确定,函数调用者不free
char* getMemory()
{
static char strContent[] = "Horse and Donkey";
return strContent;
}
注:函数调用者并不知道返回的内存地址是全局数据空间或heap,因此无须free,即使是heap,也是函数定义者另外提供接口负责释放
函数定义allocate,函数调用者free
char* getCopyMemory()
{
char* strContent = (char*)malloc(32);
strncpy(strContent, "Horse and Donkey", 32);
return strContent;
}
注:习惯约定函数名包含copy以提升函数调用者free
函数调用者allocate,函数调用者free
void getMemory(char* strContent, size_t len)
{
strncpy(strContent, "Horse and Donkey", len);
}
注:函数名不包含copy,参数形式已明确函数调用者allocate,函数调用者free