更新时间:2016-12-12 12:03:56浏览次数:1+次
在无意之中,看到一篇文章《C库中没有itoa以及C++中string没有split方法的原因》,引人思考,所以引用过来供大家阅读思考。
我的思考的想法先分享一下:在C/C++中,内存管理由程序员负责,所以程序员需要谨慎使用内存,否则会出现各种内存错误。这也是程序员头疼的事情,所以很多程序员很畏惧C/C++,不敢学不敢用,因此来讨厌C/C++难用。其实,关键点就是,C/C++是高手玩的转的东西,水平不够的不要喷。
那么文章《C库中没有itoa以及C++中string没有split方法的原因》给我的启示就是内存的管理问题。文中根据“自己分配自己释放”的内存使用原则来推断了itoa函数和string的split函数不存在的原因,不无道理。在文中的举例说明中,让我突然感觉到内存管理的启发。因为我在之前处理内存的时候,一直在纠结内存的管理关系,要设计一个良好的内存管理的函数。其实就是“自己分配自己释放”,传指针是可以的,只要符合这个原则即可。如果违背这个原则,指针的使用就混乱不堪,而且,指针的传递的层次不要太深,否则一样会随着层次的深入而背离了“自己分配自己释放”的原则。
下面是引用的文章的信息:
文章标题:《C库中没有itoa以及C++中string没有split方法的原因》
引用原文作者:wangdai
引用原文地址:https://segmentfault.com/a/1190000002643565
引用原文内容:
个人见解,欢迎讨论。这其实源于c/c++需要自己管理内存,而一个好的惯例是:自己申请的内存要自己释放掉。
所以c/c++库函数一般都不会返回指针,你会说有些函数返回指针了呀,如:
char *strcpy (char * __dest, const char * __src);
但实际返回的是你传入的__dest,内存还是你申请的。另外像一些用c实现的容器会返回指针,比如我们自己实现一个stack可以这样:typedef struct Stack_T *Stack_T;
void Stack_push(Stack_T stk, void *x);
void *Stack_pop(Stack_T stk);
但事实上pop出来的void *仍然是你自己push进去的,这个stack并不会帮你生成一个*x的copy,它只存你给它的指针而不是实际的变量。所以这个stack只用自己管理自己的内存,它的内存操作是隐藏在函数内部的,与push和pop对应。
相关资讯