I'm a doctor, not a mechanic
|Object >> ObjectPool|
Provides a pool for unused non-actor objects that can be reused later.
The object pool is always available to any actors via
Level.ObjectPool. Instead of creating new non-actor objects with the new operator, you call
Level.ObjectPool.AllocateObject() with the desired object class. You may have to typecast the result to the requested class. It is a good idea to explicitly initialize all relevant properties of the allocated object as it may have been used before and properties might not have their default values anymore. Provided all other object pool users play by the rules, the returned object will not be referenced or used by anything else, so apart from explicit initialization you can use it like any other object.
When you no longer need an object, whether you allocated it from the pool or not, you can release it into the pool by calling
Level.ObjectPool.FreeObject(). Make sure that the object is no longer referenced by any of your code afterwards. If the object contains sensible information or references other objects, it's a good idea to clear the relevant variables before releasing the object.
The actual object pool.
Returns an object of the specified class from the pool. If the pool did not contain any object of that class, a new instance of the specified class is created and returned.
Puts the specified object into the pool. Make sure the object is no longer referenced by anything else when releasing it into the pool. Keep in mind that the object is not explicitly reset when it is added to or allocated from the pool. Any data the object contained when it was added will still be there when it is allocated again.
Empties the object pool. Provided the objects are not referenced anywhere else, they are subject to garbage collection now.