]> git.saurik.com Git - cycript.git/blobdiff - Pooling.hpp
Avoid infinite recursion while CYONifying objects.
[cycript.git] / Pooling.hpp
index 24c7cc25af044776623638f1dd9efc36650c1c84..e3116d949623df36169bd35e9b3bac96ab52f79f 100644 (file)
@@ -62,6 +62,11 @@ class CYPool {
         return (size + 7) & ~0x3;
     }
 
+    template <typename Type_>
+    static void delete_(void *data) {
+        reinterpret_cast<Type_ *>(data)->~Type_();
+    }
+
     CYPool(const CYPool &);
 
   public:
@@ -182,6 +187,13 @@ class CYPool {
     }
 
     void atexit(void (*code)(void *), void *data = NULL);
+
+    template <typename Type_>
+    Type_ &object() {
+        Type_ *value(new(*this) Type_());
+        atexit(&delete_<Type_>, value);
+        return *value;
+    }
 };
 
 _finline void *operator new(size_t size, CYPool &pool) {