Cocos2d-x开发中C++内存管理
作者:网络转载 发布时间:[ 2015/1/29 14:36:16 ] 推荐标签:C++ 软件开发 内存管理
因为?始并没有介绍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.
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11