给定一个从
new
表达式获得的指针,用显式调用析构函数(或 delete
)然后调用 std::destroy_at
来替换相应的 operator delete
表达式是否合法?
在我的项目中,我使用了自定义形式的 RTTI。对于具有动态调度析构函数的类型,delete
表达式不会调用适当的析构函数,而是调用基类的析构函数。为了解决这个问题,我“手动”(通过我的 RTTI 机器)根据分配对象的运行时类型调用正确的析构函数,然后直接调用
operator delete
来释放内存。这个解决方案在我的项目中运行良好(用 clang 和 msvc 编译),但我想知道这是否会调用未定义的行为。
我不是在征求使用定制 RTTI 替代品是否合理的建议。