cocos2d-x 中的 C++ 动态分配

C++ dynamic allocation in cocos2d-x

我在主 cpp 中创建了一个指针变量,ptr_view,用于动态分配 在屏幕中创建一些视图和按钮。

还有sch,这是class_A、class_B中的一个普通指针... 用于指示 main class 访问该指针 ptr_view。 当按下按钮 class_A 时,如下所示的函数是 运行.

void class_A::ChangeView_B()
{
CC_SAFE_DELETE(sch->ptr_view);
sch->ptr_view = new  class_B;
sch->ptr_view->RCreation(main_view);
}

但这显然会造成错误,我终于知道为什么了, 因为 class_A 的记忆在 CC_SAFE_DELETE 为 运行 时终止 所以当试图访问 sch->ptr_view 时 'sch' 不再存在。 但仍然不知道如何解决这个问题。 有没有人能给我一点线索来解决这个问题?

如果您使用智能指针类型来管理内存,您的逻辑将更容易推理。 Cocos2d-x 提供了它自己的智能指针类型,cocos2d::RefPtr<T>,它本质上是一个引用计数指针(想想 std::shared_ptr<T> 或 Objective-C ARC)。

就是说,鉴于问题中的信息,您发布的代码没有理由不工作。 CC_SAFE_DELETE(sch->ptr_view)(实际上是 delete ptr; ptr = nullptr;)不应删除 sch。您的程序中可能存在其他内存错误。再说一次:智能指针是你的朋友。