2017-09-10 9 views
0

ダイナミック割り当て のメインcppにポインタ変数ptr_viewを作成して、画面内にいくつかのビュー&ボタンを作成しました。cocos2d-xでのC++の動的割り当て

これはclass_Aの共通ポインターで、class_B ... そのポインターptr_viewにアクセスするためのメインクラスを示します。 class_Aボタンを押すと、以下のような機能が動作しています。 sch-> ptr_viewアクセスしようとしたときにCC_SAFE_DELETEが01​​を実行しているとき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)を削除し、cleanUp()のような新しい関数を挿入すると、class_Aがシーンに残っているすべてのボタンとリソースが削除されますが、エラーは発生していません。私もこれをデバッグしていましたが、ptr-> viewでエラーが発生しました。このコードの後に​​ "sch"がnullを返します。 C++でしか解決できない他のアイデアはありますか?私はObjective-Cについて全く知らない。 –

+0

私はこの問題を非常に簡単に解決しました。私は "ptr_view"を他のシングルトンクラスに移動したので、すべてのクラスで "sch"のような変数を作る必要はありません...しかし、logan20735をありがとう、私はスマートポインタが何であるか知りました。 –

関連する問題