0

わかりました、UObject から継承するいくつかのクラスを作成しました。これをレベル BP で (Construct オブジェクト ノードを使用して) 作成し、参照を BP 変数に格納できます。オブジェクトを作成するとき、Outer を self に設定しています。したがって、新しく作成されたオブジェクトを所有するレベル BP。今私の質問は、このオブジェクトをメモリから削除する方法ですか? BP 変数を null に設定しようとしましたが、このオブジェクトを解放するにはレベルを破棄する必要があるようです。レベルを落とさずにそれを行う方法はありますか?

4

2 に答える 2

0

現時点では UE4 にアクセスできませんが、これが正しい方向に役立つ/ヒントになることを願っています:

UObject はガベージ コレクターによって管理されます。UObject を適切に作成するには、NewObject()、NewNamedObject()、および ConstructObject() を使用します。オブジェクト フラグの列挙を使用して、作成時に UObject がガベージ コレクターによって処理される方法を構成することができます。(UObject インスタンスの作成について詳しく知りたい場合は、ここにアクセスしてください: hhttps://docs.unrealengine.com/latest/INT/Programming/UnrealArchitecture/Objects/Creation/index.html )

このように、UObject で new または delete を呼び出すべきではありません。UObject が不要になった場合、通常はそれへの参照がないことを意味します (ただし、これは、UObject の作成時に使用されたコンテキストとガベージ コレクション フラグによって異なる場合があります)。この状況では、ForceGarbageCollection() 関数を実行できます。

GetWorld()->ForceGarbageCollection(true);

このメソッドを呼び出すと、状況によってはクラッシュが発生する可能性があることに注意してください。特に、オブジェクトがガベージ コレクターによって既に破棄されている場合や、値が null の場合に発生します。

また、Unreal Object Handling について詳しく知りたい場合は、こちらにアクセスしてください: hhttps://docs.unrealengine.com/latest/INT/Programming/UnrealArchitecture/Objects/Optimizations/index.html

クレジット : https://answers.unrealengine.com/questions/219430/explicitely-delete-a-uobject.html

Ps。十分な評判がないため、StackOverflow では 2 つ以上のリンクを投稿できません。壊れたリンクから最初の 'h' を削除してください。

于 2015-11-24T16:49:44.787 に答える