VTK  9.3.20240528
vtkGarbageCollector.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
63#ifndef vtkGarbageCollector_h
64#define vtkGarbageCollector_h
65
66#include "vtkCommonCoreModule.h" // For export macro
67#include "vtkGarbageCollectorManager.h" // Needed for singleton initialization.
68#include "vtkObject.h"
69
70// This function is a friend of the collector so that it can call the
71// internal report method.
72VTK_ABI_NAMESPACE_BEGIN
73void VTKCOMMONCORE_EXPORT vtkGarbageCollectorReportInternal(
74 vtkGarbageCollector*, vtkObjectBase*, void*, const char*);
75
76// This allows vtkObjectBase to get at the methods it needs.
77class vtkObjectBaseToGarbageCollectorFriendship;
78
79class VTKCOMMONCORE_EXPORT vtkGarbageCollector : public vtkObject
80{
81public:
83 void PrintSelf(ostream& os, vtkIndent indent) override;
85
98 static void Collect();
99
111 static void Collect(vtkObjectBase* root);
112
114
123
125
129 static void SetGlobalDebugFlag(bool flag);
130 static bool GetGlobalDebugFlag();
132
133protected:
136
137private:
148 static vtkTypeBool GiveReference(vtkObjectBase* obj);
149
158 static vtkTypeBool TakeReference(vtkObjectBase* obj);
159
160 // Singleton management functions.
161 static void ClassInitialize();
162 static void ClassFinalize();
163
165 friend class vtkObjectBaseToGarbageCollectorFriendship;
166
167 // Internal report callback and friend function that calls it.
168 virtual void Report(vtkObjectBase* obj, void* ptr, const char* desc);
169 friend void VTKCOMMONCORE_EXPORT vtkGarbageCollectorReportInternal(
170 vtkGarbageCollector*, vtkObjectBase*, void*, const char*);
171
173 void operator=(const vtkGarbageCollector&) = delete;
174};
175
177
181void VTKCOMMONCORE_EXPORT vtkGarbageCollectorReport(
182 vtkGarbageCollector* collector, vtkSmartPointerBase& ptr, const char* desc);
183
187template <class T>
188void vtkGarbageCollectorReport(vtkGarbageCollector* collector, T*& ptr, const char* desc)
189{
190 vtkGarbageCollectorReportInternal(collector, ptr, &ptr, desc);
191}
192
193VTK_ABI_NAMESPACE_END
194#endif
Manages the vtkGarbageCollector singleton.
Detect and break reference loops.
static vtkGarbageCollector * New()
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
static void DeferredCollectionPop()
Push/Pop whether to do deferred collection.
static void DeferredCollectionPush()
Push/Pop whether to do deferred collection.
static void Collect(vtkObjectBase *root)
Collect immediately using the given object as the root for a reference graph walk.
static void SetGlobalDebugFlag(bool flag)
Set/Get global garbage collection debugging flag.
~vtkGarbageCollector() override
static void Collect()
Collect immediately using any objects whose collection was previously deferred as a root for the refe...
static bool GetGlobalDebugFlag()
Set/Get global garbage collection debugging flag.
friend void VTKCOMMONCORE_EXPORT vtkGarbageCollectorReportInternal(vtkGarbageCollector *, vtkObjectBase *, void *, const char *)
a simple class to control print indentation
Definition vtkIndent.h:108
abstract base class for most VTK objects
friend class vtkGarbageCollector
Some classes need to clear the reference counts manually due to the way they work.
abstract base class for most VTK objects
Definition vtkObject.h:162
Non-templated superclass for vtkSmartPointer.
int vtkTypeBool
Definition vtkABI.h:64
void VTKCOMMONCORE_EXPORT vtkGarbageCollectorReport(vtkGarbageCollector *collector, vtkSmartPointerBase &ptr, const char *desc)
Function to report a reference held by a smart pointer to a collector.
void VTKCOMMONCORE_EXPORT vtkGarbageCollectorReportInternal(vtkGarbageCollector *, vtkObjectBase *, void *, const char *)