为什么cocos2d-x schedule改变了成员对象
Why cocos2d-x schedule changed the member object?
我在cocos2d-x项目中有这两个类:
class A : public Layer
{
...
B * b;
void callAddNumber(float dt);
}
A::A()
{
b = B::create();
}
void A::callAddNumber(float dt)
{
b->addNumber();
}
class B : public Node
{
...
int number;
B();
void addNumber();
}
B::B()
{
number = 100;
}
void B::addNumber()
{
number += 1;
}
和A对象调用shschedule(schedule_selector(A::callAddNumber), 1.0f);
但数目并没有如我所料地增加;似乎在我调度之后,b对象被释放了?b->号码变成了垃圾号码?为什么会发生这种情况?我确信我在A的构造函数中初始化了b
。
没有显示相关代码。
一般::create()返回一个指向AutoRelease对象的指针。这个对象将在下一帧被释放,除非有人先保留它。
所有从Ref继承的对象都应该在使用retain()/release()策略管理的堆和内存上创建。也就是说,任何想要保持对它们的引用的人都必须在接受引用时调用retain()
方法,并在它被销毁或在它释放对象之前记住调用release()
方法。
On::create()将对象添加到autoRelease Queue中。这是一个对象队列,将在下一帧之前被释放。因此,除非有人在此之前调用::retain(),否则对象将被释放。
(您可以使用侵入式智能指针包装器使所有这些簿记都消失)
相关文章:
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 在运行时有条件地删除类成员或跳过调用该成员对象的构造函数
- C++是否有定义的方法来传递指向类的成员对象的成员函数的指针
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- 声明成员对象而不调用其默认构造函数
- 指向成员对象的指针 - 中断线程
- 是否有更好的方法来封装成员对象可以访问的共享存储池?
- 应该在成员对象上调用析构函数
- 调用成员对象的构造函数
- 将 const 类型引用对象注册为类成员对象C++
- 修改类 c++ 中的成员对象
- 从成员对象调用方法
- 从对象调用成员对象,错误:引用非常量值的初始值必须是左值
- 构造函数,成员对象
- 不能使外部类成为内部类内的成员对象
- 使用从另一个类继承的类的对象初始化成员对象
- 如何避免需要在初始化列表中初始化成员对象
- 初始化具有参数的类成员对象的正确方法
- 将指针添加到成员对象中的指针动态阵列
- 为什么cocos2d-x schedule改变了成员对象