Hexococos2dx 3.0 ---- ccCArray 2014-12-12
ccArray*
系列和ccCArray*
系列
这两个系列的区别就是:
ccArray 是包含retain/release的,即ccArray的对象需要是Ref的子类。
ccCArray 则是c风格的动态数组,对数组元素没有要求。
路径
1 | 2d/support/data-support/ccCArray.h |
源码分析
ccArray系列
先看结构体
1 | typedef struct _ccArray { |
我看了实现的代码,和std::vector动态数组的实现还是类似的。
这个每次的扩容都是当前容量*2
另外值得注意的一点是,arr是使用calloc申请空间的。
1 | ccArray* ccArrayNew(ssize_t capacity) |
calloc和malloc的区别在于:
- calloc含有两个参数,数量和单位大小
- calloc会将申请来的内存清零,而malloc则不会。
ccCArray系列
结构体的不同之处在于arr的类型变成了void**类型。
1 | truct _ccCArray { |
其他的地方和ccArray系列都差不多。代码也就不贴上来了。
总结
说到std::vector这些乱七八糟的东西,就想到了那本讲stl的书,之前稍微看了一点点,没看完,感觉还是得抽点时间去仔细看看!