问个问题。。。可能很简单,可我脑子就是转不过弯了。。求解

c++ 堆对象 例如aaa* a = new aaa();不自动调用析构函数,加上delete a;才调用析构函数
这没问题。。
可是cocos2dx貌似。。。
问题是这样,我做了一个实验 如下:
Role::~Role(){
CCLOG(“ss”);
}
Role* Role::create(CCTMXTiledMap* map){
Role* role = new Role();
if(role->init()){
role->setMap(map);
role->m_spriteinit();
role->autorelease();
return role;
}
return NULL;
}

role = Role::create(map);
map->addChild(role);

为什么我退出时会调用析构函数??输出ss呢?

role->autorelease();
这句话引起的。autorelease的作用是,在代码空间里面没有被引用(或者引用计数为0)的节点会被清除。
当没有人引用到role的时候(role不是一个节点的子节点,没有retain,把引用计数+1),它就会被自动清除。

init这里没有将 role 的引用计数+1。
autorelease也没有-1.

addchild和retain都会使role的引用计数增加。

学习了:2:

我的回复删除了以免误导人

明白了,谢谢哈