擅长:python、mysql、java
<p>我根本不知道pythonapi,但是如果python将分配和初始化分开,您应该能够使用placement new。</p>
<p>例如:</p>
<pre><code> // tp_alloc
void *buffer = new char[sizeof(MyExtensionObject)];
// tp_init or tp_new (not sure what the distinction is there)
new (buffer) MyExtensionObject(args);
return static_cast<MyExtensionObject*>(buffer);
...
// tp_del
myExtensionObject->~MyExtensionObject(); // call dtor
// tp_dealloc (or tp_free? again I don't know the python apis)
delete [] (static_cast<char*>(static_cast<void*>(myExtensionObject)));
</code></pre>