对于以前没有接触过C++,然后初次接触Cocos2d-x的朋友来说,可能对于内存管理方面会比较生疏。
也经常会因为内存问题导致各种小Bug,我也曾经写过一篇retain和release倒底怎么玩?,用来驾驭Cocos2d-x的对象引用和释放也算是足够了。
但,难道大家就不想知道retain和release背后的秘密吗?(小若:不想。)
没错,今天木头来带大家走进科学,走进世界,一起来探讨C++的new和delete。(小若:没兴趣。)
好,既然大家都等不及了,那就开始吧~
1.动态分配内存
我们都知道,像“int num = 10;”这样的语句,声明了一个num变量,这个变量是需要内存来放置(就像你的文档需要硬盘来放置)。
对于这样的普通变量,是在编译的时候就分配好内存的。
没错,就像你出生的时候就决定了是男是女了。(小若:这个比喻感觉一点关系都扯不上啊!而且,谁说出生就决定的?!)
通过声明指针变量可以指向这些预先被分配好的内存地址,但,我们的指针可不仅仅是为此而存在的。
指针还可以保存动态分配的内存的地址。
那么,怎么动态分配内存呢?没错,就是new,如下代码:
// 可以这样
int *p = new int;
// 还可以这样
int *p = new int();
// 使用
*p = 20;
// 最后,要释放内存
delete p;
通过new后面跟着类型,就可以创建用于保存某种类型的内存空间,然后返回这个内存空间的地址。
它和直接声明int变量的区别是:
1.new出来的变量在运行程序的时候才会申请内存,普通int变量在编译的时候就分配了内存;
2.new出来的变量在不使用的时候需要释放掉,否则会内存泄露,使用delete即可释放指针指向的内存空间。
2.new和delete的配对
动态申请的内存,在不使用的时候,一定不要忘了释放掉,否则会造成内存泄露。
粗俗地说,不,通俗地说,动态申请了内存,其实只不过是告诉操作系统,这块内存归我了,其他人不能使用。
操作系统会乖乖地把你申请的那块内存给你用,如果你没有明确告诉它你不需要这块内存,则这内存永远都只能由你来使用。(当然,会有意外情况的,这个忽略)










