我有几个类,我连接到
AngelScript引擎.这个引擎使用有趣的方式来分配对象:它分配所需的内存量(可能使用malloc()),当作者建议使用这样的结构在这个内存中创建对象时:
static void Constructor(ObjectType *thisPointer) { new(thisPointer) ObjectType(); }
和这样的代码来销毁对象:
static void Destructor(ObjectType *thisPointer) { thisPointer->~ObjectType(); }
我有几个问题:
>这种方式使用析构函数是否正确? (Eclipse判断这是一个错误)据我所知,这段代码应该调用析构函数而不释放内存(调用free())
>是否可以使用delete(thisPointer)(或类似的东西)而不是这种结构,它是否相同? (至少这段代码在编译和运行时没有错误)
>还有其他方法可以在不释放内存的情况下调用析构函数吗?
先感谢您.
解决方法
Is it correct way to use destructor this way?
是.您使用placement-new就地构造了对象,因此必须使用显式析构函数调用来销毁它(假设它具有非平凡的析构函数).
Is it possible to use
delete(thisPointer)
(or something like it) instead of this construction and is it will be equivalent?
删除号将尝试使用operator delete()将内存释放到免费存储区;这只有在使用普通的新表达式(或者可能是显式使用operator new())时才有效.
Is there other ways to call destructor without deallocating memory?