官术网_书友最值得收藏!

Destroying UObject-derived classes

Removing any UObject derivative is simple in UE4. When you are ready to delete your UObject-derived class, we will simply call a single function (ConditionalBeginDestroy()) on it to begin teardown. We do not use the native C++ delete command on UObject derivatives. We show this in the following recipe.

Getting ready

You need to call ConditionalBeginDestroy() on any unused UObject-derived classes so that they get removed from memory. Do not call delete on a UObject-derived class to recoup the system memory. You must use the internal engine-provided memory management functions instead. The way to do this is shown next.

How to do it...

  1. Call objectInstance->ConditionalBeginDestroy() on your object instance.
  2. Null all your references to objectInstance in your client code, and do not use objectInstance again after ConditionalBeginDestroy() has been called on it.

How it works…

The ConditionalBeginDestroy() function begins the destruction process by removing all internal engine linkages to it. This marks the object for destruction as far as the engine is concerned. The object is then destroyed some time later by destroying its internal properties, followed by actual destruction of the object.

After ConditionalBeginDestroy() has been called on an object, your (client) code must consider the object to be destroyed, and must no longer use it.

Actual memory recovery happens some time later than when ConditionalBeginDestroy() has been called on an object. There is a garbage collection routine that finishes clearing the memory of objects that are no longer referenced by the game program at fixed time intervals. The time interval between garbage collector calls is listed in C:\Program Files (x86)\Epic Games\4.11\Engine\Config \BaseEngine.ini, and defaults to one collection every 60 seconds:

gc.TimeBetweenPurgingPendingKillObjects=60

Tip

If memory seems low after several ConditionalBeginDestroy() calls, you can trigger memory cleanup by calling GetWorld()->ForceGarbageCollection(true) to force an internal memory cleanup.

Usually, you do not need to worry about garbage collection or the interval unless you urgently need memory cleared. Do not call garbage collection routines too often, as this may cause unnecessary lag in the game.

主站蜘蛛池模板: 巴楚县| 行唐县| 百色市| 三江| 泊头市| 洮南市| 马尔康县| 荆州市| 阿鲁科尔沁旗| 马鞍山市| 石景山区| 浦北县| 华池县| 宜城市| 麻城市| 怀柔区| 饶阳县| 乌海市| 南丹县| 五大连池市| 吴忠市| 富锦市| 邵阳县| 临夏县| 旬阳县| 温泉县| 吉林省| 黔江区| 镇坪县| 吉安县| 哈尔滨市| 溧阳市| 茌平县| 静乐县| 五家渠市| 铜陵市| 望奎县| 肇源县| 宜兰市| 五指山市| 分宜县|