源地址:
http://blog.csdn.net/jinciyulang/article/details/8631889
阅读cocos2d-x demo的代码,我们会看到有些头文件中使用CREATE_FUNC这个宏,那么它是做什么的呢?在cocos2d-x 又是起什么作用呢?下面我们就一起来看看CREATE_FUNC宏的源代码:
/** * define a create function for a specific type, such as CCLayer * @__TYPE__ class type to add create(), such as CCLayer */ #define CREATE_FUNC(__TYPE__) \ static __TYPE__* create() \ { \ __TYPE__ *pRet = new __TYPE__(); \ if (pRet && pRet->init()) \ { \ pRet->autorelease(); \ return pRet; \ } \ else \ { \ delete pRet; \ pRet = NULL; \ return NULL; \ } \ }
注释中写的很明确,为一个类似CCLayer类的特定的类增加一个create函数(就是这个宏给自动给我们写了一个create的一个函数,我们自己不用定义create()也可以用create()函数).我们也可以看到在宏的下面定义了一个create()函数返回的类型就是宏带入的参数__TYPE__指针类型.那create函数里做了什么呢?它执行了类的构造函数,执行了init()初始化函数,最后又设置创建出的对象为自动释放内存.这样其他人在使用这个类的时候,只要是用create()函数创建出来的对象就不用费心去管理释放内存了.这个宏是不是很好用?
相关推荐
为了简化`struct work_struct`的创建和初始化过程,Linux内核提供了几个宏定义: - **`__WORK_INITIALIZER`**:用于初始化一个`struct work_struct`实例。这个宏会初始化`entry`链表节点、`func`回调函数和`data`...
列表构建器是一种简洁、高效的创建列表的方法,它可以在一行代码内完成对序列的迭代和操作。例如,创建1到100的平方数列表: ```python lix = [x * x for x in range(1, 101)] ``` 列表构建器还可以包含条件语句,...
### C语言多线程知识点详解 ...在这个例子中,我们定义了一个线程函数`thread_func`,并在`main`函数中创建了一个线程来执行这个函数。通过`pthread_join()`函数等待新创建的线程完成,确保资源被正确释放。
1. 使用`CREATE FUNCTION`语句定义存储函数`func_1`,接受用户名称作为参数。 2. 构建SQL查询语句,查询该用户当前借阅中的图书名称。 3. 调用存储函数`func_1`并传入实际用户名称,查看返回结果。 #### 4. 创建...
MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),因其高效性、稳定性和易用性而备受开发者青睐。本文档将基于给定的部分内容来深入探讨MySQL中的一些常用操作语句。 #### 二、基本操作 ##### 1. 显示...
本文将深入探讨Linux条件变量的使用方法及其应用场景。 #### 二、条件变量简介 条件变量是一种用于实现线程间同步的机制,它主要用于解决线程之间的协作问题,特别是当一个线程需要等待某个条件成立时才能继续执行...
- **`Object.create()`**:这个方法可以用来创建一个新对象,并将新对象的原型设置为另一个对象,即实现原型继承。 2. **函数(Functions)**: - **函数作为一等公民**:在JavaScript中,函数是一种数据类型,...
本篇文章将深入探讨如何在Python中自定义线程池,包括其概念、原理、实现方法以及注意事项。 线程池的基本思想是预先创建一定数量的线程,这些线程在完成任务后不会立即销毁,而是进入空闲状态,等待新的任务到来。...
执行时可以不用输入扩展名,比如输入test如果当前路径下有一个test.g4b就会自动使用。 2013-10-17 1.修改代码支持新版HOTKEY。 2013-07-10 1.insmod现在支持长文件名(以前最多11个字符,现在没有限制). 2....
将结构体成员初始化为常量或使用宏定义。 **2.9 怎样从/向数据文件读/写结构?** 使用`fwrite`和`fread`函数,确保结构体的布局符合文件格式。 **2.10 我的编译器在结构中留下了空洞,这导致空间浪费而且无法与...
你正在使用一个UNIX系统(或者 cygwin),他们将使得构建LuaBind静态库变得很简单.如果 你正在使用 Visual Studio ,很简单的包含 src 目录下的文件到你的工程即可. 构建LuaBind的时候,你可以设定一些选项来使得库更加...
### Linux多线程使用互斥量同步线程 #### 一、什么是互斥量 互斥量(Mutex,Mutual Exclusion Object)是一种用于多线程编程中的同步机制,其目的是确保同一时间只有一个线程可以访问共享资源或临界区。这种机制...
3. `createJson()`:此方法创建了一个JSONArray,但代码未完成,通常你会在这里添加更多的元素或对象,然后将其转换为JSON字符串。 在实际项目中,你可能还需要处理更复杂的JSON结构,例如包含嵌套对象或数组的对象...
`Subscriber` 的三个方法 `onCompleted()`、`onError()` 和 `onNext()` 分别对应于 Observable 发送完成信号、发送错误或发送数据时的回调。 ### FitMap 的使用 `flatMap()` 是 RxJava 中的一个转换操作符,它接受...
- 第一种方法是每次需要写数据时将socket加入epoll,接收到可写事件后写入数据,完成后移出epoll。这种方式虽然简单,但增加了epoll_ctl的操作成本。 - 第二种方法,即直接写(directly-write),尝试直接调用send...
- **系统自动生成ID** -> `FUNC_CREATE_GUID()` - **获取有变化的行** -> `SELECT ROW_COUNT(); IF ROW_COUNT = 0 THEN ...` #### 四、总结 从Oracle到MySQL的迁移是一项复杂的工作,涉及数据库结构、数据类型、...
然而,如果确实需要使用全局变量,建议将它们定义在一个单独的头文件中,并使用适当的`extern`声明来暴露给其他源文件。这样可以避免命名冲突,并且易于维护。 **1.4 `extern`在函数声明中是什么意思?** `extern`...