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
。您的程序中可能存在其他内存错误。再说一次:智能指针是你的朋友。
我在主 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
。您的程序中可能存在其他内存错误。再说一次:智能指针是你的朋友。