陈规偏见,多源于已有的认知(或经验,或学识)和对权威的膜拜。 谁负责释放资源? 如下char * fun(const char* str) { size_t len = strlen(str); char* p = (char*) malloc( len+1 ); return p; }
看到这样的代码,大部分有过C++加持的人或膜拜教科书的人(我承认我以前也是这样的人),会大喊:内存泄漏。
的确,fun函数申请了一块内存,但是fun函数没有负责释放,这个行为与“谁申请,谁释放”的信条极为冲突。
然而,加上如下注释呢?//fun函数的返回值指向了使用malloc的方式申请了内存,当不再使用这个值时,需要用free释放 char * fun(const char* str) { size_t len = strlen(str); char* p = (char*) malloc( len+1 ); return p; }
这样,内存释放的责任便落到了fun函数调用者的身上,一切就通顺了。
不过,仍然会有一部分人说“编码任务繁重,谁有时间去看注释”。
那我们来看看一个C的库函数:fopen函数负责释放打开的文件句柄了吗?我们再使用fopen时,不一样看fopenFILE *fopen( const char *filename,const char *mode );
打破陈规偏见,C/C++资源释放
最新推荐文章于 2022-11-03 09:02:52 发布