c – delete(Object)等效于调用Object .~Object()

前端之家收集整理的这篇文章主要介绍了c – delete(Object)等效于调用Object .~Object()前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有几个类,我连接到 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?

并不是的.调用析构函数当然是调用析构函数的最清晰,最简单的方法.

猜你在找的C&C++相关文章