Reference Counting
Reference Counts
To manage the lifetime of objects, Panda3D has a reference counting system for many objects. This means that for every object that uses this mechanism, a reference count is kept which counts the number of references exist to that object. Every time a new reference is made (eg. assigned to a new variable), the reference count is increased. When the reference count reaches zero, the object is deleted.
This is similar to Python’s reference counting system, and in fact, the two systems interact when Panda3D is used with Python. However, since an object’s lifetime may persist beyond the lifetime of an object in Python, Python’s own reference counting system alone is not sufficient.
Since this system is entirely integrated with Python’s own reference counting system, you generally do not need to be concerned with the details of this system. This page only exists for advanced users who need to manipulate the reference count for low-level integration with C++ code.
The class that manages the reference count is ReferenceCount
. To see
if a class is reference counted, check if it inherits from ReferenceCount.
C++ classes that are reference counted inherit from either
ReferenceCount
or TypedReferenceCount
(if use of the typing
system is desired), or another class that itself inherits from
ReferenceCount
.
Managing Reference Counts
There are several ways that the reference count can be manipulated in code.
To get the number of references to an object, use the
getRefCount()
method.
The reference counted can be incremented and decremented manually using the
ref()
and unref()
methods, but
be careful! This messes up Panda’s internal bookkeeping, and will likely cause
crashes and memory leaks. Do not do this unless you know exactly what you’re
doing!