VTK  9.2.6
vtkGarbageCollector.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkGarbageCollector.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
75 #ifndef vtkGarbageCollector_h
76 #define vtkGarbageCollector_h
77 
78 #include "vtkCommonCoreModule.h" // For export macro
79 #include "vtkGarbageCollectorManager.h" // Needed for singleton initialization.
80 #include "vtkObject.h"
81 
82 // This function is a friend of the collector so that it can call the
83 // internal report method.
84 void VTKCOMMONCORE_EXPORT vtkGarbageCollectorReportInternal(
85  vtkGarbageCollector*, vtkObjectBase*, void*, const char*);
86 
87 // This allows vtkObjectBase to get at the methods it needs.
88 class vtkObjectBaseToGarbageCollectorFriendship;
89 
90 class VTKCOMMONCORE_EXPORT vtkGarbageCollector : public vtkObject
91 {
92 public:
94  void PrintSelf(ostream& os, vtkIndent indent) override;
95  static vtkGarbageCollector* New();
96 
109  static void Collect();
110 
122  static void Collect(vtkObjectBase* root);
123 
125 
131  static void DeferredCollectionPush();
132  static void DeferredCollectionPop();
134 
136 
140  static void SetGlobalDebugFlag(bool flag);
141  static bool GetGlobalDebugFlag();
143 
144 protected:
146  ~vtkGarbageCollector() override;
147 
148 private:
159  static int GiveReference(vtkObjectBase* obj);
160 
169  static int TakeReference(vtkObjectBase* obj);
170 
171  // Singleton management functions.
172  static void ClassInitialize();
173  static void ClassFinalize();
174 
176  friend class vtkObjectBaseToGarbageCollectorFriendship;
177 
178  // Internal report callback and friend function that calls it.
179  virtual void Report(vtkObjectBase* obj, void* ptr, const char* desc);
180  friend void VTKCOMMONCORE_EXPORT vtkGarbageCollectorReportInternal(
181  vtkGarbageCollector*, vtkObjectBase*, void*, const char*);
182 
183 private:
184  vtkGarbageCollector(const vtkGarbageCollector&) = delete;
185  void operator=(const vtkGarbageCollector&) = delete;
186 };
187 
188 class vtkSmartPointerBase;
189 
193 void VTKCOMMONCORE_EXPORT vtkGarbageCollectorReport(
194  vtkGarbageCollector* collector, vtkSmartPointerBase& ptr, const char* desc);
195 
199 template <class T>
200 void vtkGarbageCollectorReport(vtkGarbageCollector* collector, T*& ptr, const char* desc)
201 {
202  vtkGarbageCollectorReportInternal(collector, ptr, &ptr, desc);
203 }
204 
205 #endif
abstract base class for most VTK objects
Definition: vtkObject.h:62
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
friend class vtkGarbageCollector
Some classes need to clear the reference counts manually due to the way they work.
Detect and break reference loops.
a simple class to control print indentation
Definition: vtkIndent.h:39
Manages the vtkGarbageCollector singleton.
abstract base class for most VTK objects
Definition: vtkObjectBase.h:73
Non-templated superclass for vtkSmartPointer.
void VTKCOMMONCORE_EXPORT vtkGarbageCollectorReportInternal(vtkGarbageCollector *, vtkObjectBase *, void *, const char *)
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
void VTKCOMMONCORE_EXPORT vtkGarbageCollectorReport(vtkGarbageCollector *collector, vtkSmartPointerBase &ptr, const char *desc)
Function to report a reference held by a smart pointer to a collector.