瀏覽代碼

Update obj.h

blueloveTH 3 年之前
父節點
當前提交
27a01e91d3
共有 1 個文件被更改,包括 18 次插入2 次删除
  1. 18 2
      src/obj.h

+ 18 - 2
src/obj.h

@@ -67,7 +67,9 @@ public:
 typedef pkpy::shared_ptr<Function> _Func;
 typedef std::variant<PyVar,_Int,_Float,bool,_Str,PyVarList,_CppFunc,_Func,pkpy::shared_ptr<_Iterator>,_BoundedMethod,_Range,_Slice,_Pointer> _Value;
 
-const int _SIZEOF_VALUE = sizeof(_Value);
+const int VALUE_SIZE = sizeof(_Value);
+
+static std::vector<void*> _objPool;
 
 struct PyObject {
     PyVarDict attribs;
@@ -95,4 +97,18 @@ struct PyObject {
 
     PyObject(const _Value& val): _native(val) {}
     PyObject(_Value&& val): _native(std::move(val)) {}
-};
+
+    void* operator new(size_t size){
+        if(_objPool.empty()){
+            return ::operator new(size);
+        }else{
+            void* ptr = _objPool.back();
+            _objPool.pop_back();
+            return ptr;
+        }
+    }
+
+    void operator delete(void* ptr){
+        _objPool.push_back(ptr);
+    }
+};