新对象的自定义释放

问题描述 投票:0回答:0

给定一个从

new
表达式获得的指针,用显式调用析构函数(或
delete
)然后调用
std::destroy_at
来替换相应的
operator delete
表达式是否合法?

在我的项目中,我使用了自定义形式的 RTTI。对于具有动态调度析构函数的类型,

delete

 表达式不会调用适当的析构函数,而是调用基类的析构函数。为了解决这个问题,我“手动”(通过我的 RTTI 机器)根据分配对象的运行时类型调用正确的析构函数,然后直接调用 
operator delete
 来释放内存。

这个解决方案在我的项目中运行良好(用 clang 和 msvc 编译),但我想知道这是否会调用未定义的行为。

我不是在征求使用定制 RTTI 替代品是否合理的建议。

c++ undefined-behavior rtti
© www.soinside.com 2019 - 2024. All rights reserved.