因为?始并没有介绍C++语言,C++的内存管理当然也没进行不论什么的说明,为了掌握Cocos2d-x中的内存管理机制,是有必要先了解一些C++内存管理的知识。
  C++内存管理非常复杂,假设全然地系统地介绍可能须要一本书的篇幅才干解释清楚。这里仅仅给大家介绍C++内存管理为主要的使用方法。
  内存分配区域
  创建对象须要两个步骤:第一步,为对象分配内存,第二步,调用构造函数初始化内存。在第一步中对象分配内存时候,我们能够选择几个不同的分配区域,这几个区域例如以下:
  栈区域分配。栈内存分配运算内置于处理器的指令集中,效率非常高,可是分配的内存容量有限。由处理器自己主动分配和释放,用来存放函数的?数值和局部变量的值等。在执行函数时,函数内局部变量的存储单元都能够在栈上创建,函数执行结束时这些存储单元自己主动被释放。
  堆区域分配。从堆上分配,亦称动态内存分配。由开发者分配释放,假设不释放,程序结束时由操作系统回收。 程序在执行的时候用malloc或new申请随意多少的内存,开发者自己负责在何时用free或delete释放内存。动态内存的生存期由开发者决定,使用非常灵活,但问题也多。
  在静态存储区域分配。这个内存空间在程序的整个执行期间都存在,内存在程序编译的时候已经分配好。它能够分配全局变量和静态变量。
  动态内存分配
  动态内存分配为灵活可是问题也非常多,我们重点介绍动态内存分配。动态内存使用malloc或new分配内存,使用free或delete释放内存。当中malloc和free是成对的,new和delete是成对的。
  1、malloc和free使用
  malloc和free是C/C++语言的标准库函数,主要是在C中使用。使用malloc创建对象,不会自己主动调用构造函数初始化内存。使用free释放对象,不会自己主动调用析构函数清除内存。
  使用malloc和free分配和释放内存的实例代码例如以下:
#include <iostream>
using namespace std;
class MyObject
{
public :
MyObject(){①
cout << "call constructor." << endl;
}
~MyObject(){ ②
cout << "call destructor." << endl;
}
void initialize(){ ③
cout << "call initialization." << endl;
}
void destroy(){④
cout << "call destroy." << endl;
}
};
int main(){
MyObject *obj = (MyObject *)malloc(sizeof(MyObject)); // 申请动态内存  ⑤
obj->initialize();⑥
//TODO
obj->destroy();⑦
free(obj);⑧
obj = NULL;
return 0;
}
  上述代码创建了声明了MyObject类,当中第①行代码是声明构造函数,第②行代码是声明析构函数。第③行代码是声明初始化函数void initialize()在使用malloc分配内存时候不能调用构造函数,通过调用该函数初始化该对象。第④行代码是声明清除函数void destroy()在使用free释放对象内存时候,通过调用该函数清除该对象的一些资源。
  第⑤~⑧行是调用MyObject类进行?试,当中第⑤行代码MyObject *obj = (MyObject *)malloc(sizeof(MyObject))是使用malloc函数分配内存,使用该函数须要指定对象的长度,还有malloc函数返回值是void*,因为C++不同意void*赋值给其他指针,所以须要强制类型转换。因为构造函数不能显式调用,所以须要第⑥行代码是初始化对象。
  第⑧行代码free(obj)是释放obj对象内存。在释放对象内存之前,我们在第⑦行代码obj->destroy()是在释放对象内存之前调用,清除该对象的一些资源,它的作用相当于析构函数。可是真正的析构函数~MyObject()并没有调用。
  执行结果例如以下:
  call initialization.
  call destroy.