作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个内存管理库,需要显式调用析构函数,在我的设计中我有一个指向对象的析构函数方法的指针,我编写如下代码:
void (*p)() = foo.~Foo;
但是我得到了
error: cannot convert ‘Foo::~Foo’ from type ‘void (Foo::)() noexcept’ to type ‘void (*)()’
我尝试了其他格式,例如 void (Foo::(*p))() noexcept = foo.~Foo;
但失败了。
那么将析构函数分配给指针的正确方法是什么?
编辑:在运行时我的代码不知道它在我的堆中是什么类型,所以我不能使用 foo.~Foo()。我需要一个适合所有析构函数的生成指针,这可能吗?
最佳答案
不允许获取析构函数的地址。
但是,您可以创建一个非常简单的模板函数并使用它:
template<class T>
void destruct(const T* x) {
x->~T();
}
现在,只需从以下位置获取指针:
destruct<Foo>
您可以使用例如。 std::bind
(或 lambda)如果您需要绑定(bind)到实际对象:
std::bind(&destruct<Foo>, foo_ptr);
请注意,一旦绑定(bind),它就无法转换为原始函数指针。
关于c++ - 如何将析构函数分配给指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58556130/
我是一名优秀的程序员,十分优秀!