Where Online Learning is simpler!
The C and C++ Include Header Files
/usr/include/nodejs/deps/v8/include/cppgc/garbage-collected.h
$ cat -n /usr/include/nodejs/deps/v8/include/cppgc/garbage-collected.h 1 // Copyright 2020 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef INCLUDE_CPPGC_GARBAGE_COLLECTED_H_ 6 #define INCLUDE_CPPGC_GARBAGE_COLLECTED_H_ 7 8 #include "cppgc/internal/api-constants.h" 9 #include "cppgc/platform.h" 10 #include "cppgc/trace-trait.h" 11 #include "cppgc/type-traits.h" 12 13 namespace cppgc { 14 15 class Visitor; 16 17 /** 18 * Base class for managed objects. Only descendent types of `GarbageCollected` 19 * can be constructed using `MakeGarbageCollected()`. Must be inherited from as 20 * left-most base class. 21 * 22 * Types inheriting from GarbageCollected must provide a method of 23 * signature `void Trace(cppgc::Visitor*) const` that dispatchs all managed 24 * pointers to the visitor and delegates to garbage-collected base classes. 25 * The method must be virtual if the type is not directly a child of 26 * GarbageCollected and marked as final. 27 * 28 * \code 29 * // Example using final class. 30 * class FinalType final : public GarbageCollected
{ 31 * public: 32 * void Trace(cppgc::Visitor* visitor) const { 33 * // Dispatch using visitor->Trace(...); 34 * } 35 * }; 36 * 37 * // Example using non-final base class. 38 * class NonFinalBase : public GarbageCollected
{ 39 * public: 40 * virtual void Trace(cppgc::Visitor*) const {} 41 * }; 42 * 43 * class FinalChild final : public NonFinalBase { 44 * public: 45 * void Trace(cppgc::Visitor* visitor) const final { 46 * // Dispatch using visitor->Trace(...); 47 * NonFinalBase::Trace(visitor); 48 * } 49 * }; 50 * \endcode 51 */ 52 template
53 class GarbageCollected { 54 public: 55 using IsGarbageCollectedTypeMarker = void; 56 using ParentMostGarbageCollectedType = T; 57 58 // Must use MakeGarbageCollected. 59 void* operator new(size_t) = delete; 60 void* operator new[](size_t) = delete; 61 // The garbage collector is taking care of reclaiming the object. Also, 62 // virtual destructor requires an unambiguous, accessible 'operator delete'. 63 void operator delete(void*) { 64 #ifdef V8_ENABLE_CHECKS 65 internal::Fatal( 66 "Manually deleting a garbage collected object is not allowed"); 67 #endif // V8_ENABLE_CHECKS 68 } 69 void operator delete[](void*) = delete; 70 71 protected: 72 GarbageCollected() = default; 73 }; 74 75 /** 76 * Base class for managed mixin objects. Such objects cannot be constructed 77 * directly but must be mixed into the inheritance hierarchy of a 78 * GarbageCollected object. 79 * 80 * Types inheriting from GarbageCollectedMixin must override a virtual method 81 * of signature `void Trace(cppgc::Visitor*) const` that dispatchs all managed 82 * pointers to the visitor and delegates to base classes. 83 * 84 * \code 85 * class Mixin : public GarbageCollectedMixin { 86 * public: 87 * void Trace(cppgc::Visitor* visitor) const override { 88 * // Dispatch using visitor->Trace(...); 89 * } 90 * }; 91 * \endcode 92 */ 93 class GarbageCollectedMixin { 94 public: 95 using IsGarbageCollectedMixinTypeMarker = void; 96 97 /** 98 * This Trace method must be overriden by objects inheriting from 99 * GarbageCollectedMixin. 100 */ 101 virtual void Trace(cppgc::Visitor*) const {} 102 }; 103 104 } // namespace cppgc 105 106 #endif // INCLUDE_CPPGC_GARBAGE_COLLECTED_H_
Contact us
|
About us
|
Term of use
|
Copyright © 2000-2025 MyWebUniversity.com ™