2017-09-10 32 views
0

동적 할당 에 대한 주 cpp에서 포인터 변수 ptr_view를 작성하여 화면에서 일부보기 & 버튼을 생성했습니다.cocos2d-x에서의 C++ 동적 할당

sch, class_A의 공통 포인터, ... 포인터 ptr_view에 액세스하기위한 주 클래스를 나타냅니다. class_A 버튼을 누르면 아래와 같은 기능이 실행 중입니다. sch-> ptr_view에 액세스하려고 할 때 CC_SAFE_DELETE가 를 실행 중일 때 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); 
} 

그러나 이것은 분명히 오류를 생성, 내가 마지막으로, 왜 을 알게 그래서 'SCH는'더 이상 존재하지 않습니다 . 그러나이 문제를 해결하는 방법을 아직 모릅니다. 누구나이 상황을 극복하기위한 약간의 단서를 줄 수 있습니까?

답변

0

스마트 포인터 유형을 사용하여 메모리를 관리하는 경우 논리가 훨씬 쉽게 설명됩니다. Cocos2d-x는 cocos2d::RefPtr<T>이라는 자체 스마트 포인터 유형을 제공합니다. 이는 본질적으로 참조 카운트 포인터입니다 (std::shared_ptr<T> 또는 Objective-C ARC).

즉, 질문에 제공된 정보가 있으면 게시 한 코드가 작동해서는 안됩니다. CC_SAFE_DELETE(sch->ptr_view) (사실 delete ptr; ptr = nullptr;)은 sch을 삭제하면 안됩니다. 프로그램에 다른 메모리 버그가있을 수 있습니다. 다시 : 똑똑한 포인터는 당신의 친구입니다.

+0

내 질문에 답변 해 주셔서 감사합니다. 그러나 CC_SAFE_DELETE (sch-> ptr_view) 코드를 삭제하고 classU가 현장에 남아있는 모든 버튼과 리소스를 삭제하는 cleanUp()과 같은 새 함수를 삽입하면 오류가 발생하지 않습니다. 나는 또한 이것을 디버깅했고 ptr-> view가 오류를 생성한다는 것을 발견했다.이 코드 뒤에 "sch"는 null을 반환한다. C++에서만 해결할 수있는 다른 아이디어가 있습니까? 나는 Objective-C에 대해 전혀 모른다. –

+0

나는이 문제를 매우 간단하게 해결했다. 나는 모든 클래스에서 "sch"와 같은 변수를 만들 필요가 없도록 "ptr_view"를 다른 싱글 톤 클래스로 옮겼습니다 ...하지만 감사합니다. logan20735, 스마트 포인터가 무엇인지 알아야합니다. –