46 lines
2.8 KiB
XML
46 lines
2.8 KiB
XML
<?xml version="1.0" encoding="UTF-8" ?>
|
|
<class name="RefCounted" inherits="Object" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
|
|
<brief_description>
|
|
Base class for reference-counted objects.
|
|
</brief_description>
|
|
<description>
|
|
Base class for any object that keeps a reference count. [Resource] and many other helper objects inherit this class.
|
|
Unlike other [Object] types, [RefCounted]s keep an internal reference counter so that they are automatically released when no longer in use, and only then. [RefCounted]s therefore do not need to be freed manually with [method Object.free].
|
|
[RefCounted] instances caught in a cyclic reference will [b]not[/b] be freed automatically. For example, if a node holds a reference to instance [code]A[/code], which directly or indirectly holds a reference back to [code]A[/code], [code]A[/code]'s reference count will be 2. Destruction of the node will leave [code]A[/code] dangling with a reference count of 1, and there will be a memory leak. To prevent this, one of the references in the cycle can be made weak with [method @GlobalScope.weakref].
|
|
In the vast majority of use cases, instantiating and using [RefCounted]-derived types is all you need to do. The methods provided in this class are only for advanced users, and can cause issues if misused.
|
|
[b]Note:[/b] In C#, reference-counted objects will not be freed instantly after they are no longer in use. Instead, garbage collection will run periodically and will free reference-counted objects that are no longer in use. This means that unused ones will linger on for a while before being removed.
|
|
</description>
|
|
<tutorials>
|
|
<link title="When and how to avoid using nodes for everything">$DOCS_URL/tutorials/best_practices/node_alternatives.html</link>
|
|
</tutorials>
|
|
<methods>
|
|
<method name="get_reference_count" qualifiers="const">
|
|
<return type="int" />
|
|
<description>
|
|
Returns the current reference count.
|
|
</description>
|
|
</method>
|
|
<method name="init_ref">
|
|
<return type="bool" />
|
|
<description>
|
|
Initializes the internal reference counter. Use this only if you really know what you are doing.
|
|
Returns whether the initialization was successful.
|
|
</description>
|
|
</method>
|
|
<method name="reference">
|
|
<return type="bool" />
|
|
<description>
|
|
Increments the internal reference counter. Use this only if you really know what you are doing.
|
|
Returns [code]true[/code] if the increment was successful, [code]false[/code] otherwise.
|
|
</description>
|
|
</method>
|
|
<method name="unreference">
|
|
<return type="bool" />
|
|
<description>
|
|
Decrements the internal reference counter. Use this only if you really know what you are doing.
|
|
Returns [code]true[/code] if the object should be freed after the decrement, [code]false[/code] otherwise.
|
|
</description>
|
|
</method>
|
|
</methods>
|
|
</class>
|