]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - wtf/RefCounted.h
JavaScriptCore-721.26.tar.gz
[apple/javascriptcore.git] / wtf / RefCounted.h
index c174145dceebff3cc11bc91bb8096abc6cebb803..761a8566f4fcb777c8b9f114c83a128f28f424e6 100644 (file)
@@ -29,7 +29,7 @@ namespace WTF {
 // This base class holds the non-template methods and attributes.
 // The RefCounted class inherits from it reducing the template bloat
 // generated by the compiler (technique called template hoisting).
-class RefCountedBase : Noncopyable {
+class RefCountedBase {
 public:
     void ref()
     {
@@ -101,7 +101,7 @@ private:
 };
 
 
-template<class T> class RefCounted : public RefCountedBase {
+template<class T> class RefCounted : public RefCountedBase, public Noncopyable {
 public:
     void deref()
     {
@@ -115,8 +115,23 @@ protected:
     }
 };
 
+template<class T> class RefCountedCustomAllocated : public RefCountedBase, public NoncopyableCustomAllocated {
+public:
+    void deref()
+    {
+        if (derefBase())
+            delete static_cast<T*>(this);
+    }
+
+protected:
+    ~RefCountedCustomAllocated()
+    {
+    }
+};
+
 } // namespace WTF
 
 using WTF::RefCounted;
+using WTF::RefCountedCustomAllocated;
 
 #endif // RefCounted_h