Cocos2dx当node在析构的时候,它的children是怎么被释放的

lvhua_2004 2014-12-05 11:08:40
今天看CCNode的代码,没有发现它的child是在什么时候被释放的。
假如在一个scene的某个layer里加入了几个sprite, 在addChild的时候有如下的代码,sprite的referenceCount加1

void Node::addChild(Node *child, int zOrder, int tag)
{
-- insertChild(child)
-- pushBack(child) // -> call CCVector.h的pushBack
-- _data.push_back( object );
-- object->retain() // ->referenceCount+1
}

然后当scene在出栈的时候, 应该会去析构自己,按我的理解在析构的时候应该会去递归的所有的children的referenceCount减1,接着释放所有的sprite,但从CCNode的析构函数,没有看到这个过程,只是把children的parent设置成NULL.

Node::~Node()
{
for (auto& child : _children)
{
child->_parent = nullptr;
}
}

感觉应该是在某个地方释放了,只是我没有看到,麻烦哪位解答一下哈。 谢谢了。
...全文
462 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
笨木头 2014-12-05
  • 打赏
  • 举报
回复
Node有个_children成员变量,保存了Node的所有子节点,这个_children是一个Vector类型。 当Node被释放之后,_children也会被释放,当Vector被释放的时候,会调用自身的clear函数,clear函数里会调用列表里的对象的release函数,于是子节点都被释放了。


~Vector<T>()
    {
        CCLOGINFO("In the destructor of Vector.");
        clear();
    }

void clear()
    {
        for( auto it = std::begin(_data); it != std::end(_data); ++it ) {
            (*it)->release();
        }
        _data.clear();
    }
lvhua_2004 2014-12-05
  • 打赏
  • 举报
回复
看到了,谢谢了哈。
lvhua_2004 2014-12-05
  • 打赏
  • 举报
回复
看到了,谢谢了哈。
内容概要:本文围绕“基于共享储能服务的智能楼宇双层优化配置”展开研究,提出了一种结合上层共享储能配置优化与下层楼宇内部能源调度优化的双层协同模型,通过Matlab代码实现,旨在提升智能楼宇在复杂能源环境下的运行效率与经济性。研究充分考虑光伏出力、负荷需求等不确定性因素,引入多维核密度估计、场景生成与削减等技术进行不确定性建模,并融合需求响应、微电网调度等先进理念,实现了对综合能源系统中储能资源的高效配置与动态调控,具有较强的理论深度与工程应用价值。; 适合人群:具备电力系统、可再生能源、优化算法或综合能源系统等相关背景,从事科研、工程应用或课题研究的研发人员、研究生及高年级本科生。; 使用场景及目标:①应用于智能楼宇、园区微电网、虚拟电厂等场景中的储能规划与运行优化;②支撑高水平学术论文(如EI/SCI)的复现、课题申报、毕业设计及实际项目的双层优化建模与求解实践。; 阅读建议:建议结合提供的Matlab代码进行实操演练,重点理解双层优化架构的设计逻辑、求解策略(如Benders分解、主从博弈等)及不确定性处理方法,同时可参考文中关联技术(如场景生成、需求响应)拓展研究思路与应用场景。

8,324

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧