如何为指针分配析构函数?

用户名

我正在编写一个内存管理库,需要显式调用析构函数,在我的设计中,我有一个指向对象的析构函数方法的指针,我编写如下代码:

void (*p)() = foo.~Foo;

但是我得到了

错误:无法将类型为“ void(Foo ::)()noexcept”的类型的“ Foo ::〜Foo”转换为“ void(*)()”类型

我尝试了其他格式,void (Foo:: (*p))() noexcept = foo.~Foo;但失败了。

那么将析构函数分配给指针的正确方法是什么?

编辑:在运行时,我的代码不知道堆中的类型,因此无法使用foo。〜Foo()。我需要一个适合所有析构函数的生成指针,这可能吗?

达鲁尼

解决方案:使用模板包装器

不允许使用析构函数的地址。

但是,您可以制作一个非常简单的模板函数,并使用它:

template<class T>
void destruct(const T* x) {
    x->~T();
}

现在,只需从以下位置获取指针:

destruct<Foo>

您可以使用例如。std::bind(或lambda),如果您需要绑定到实际对象:

std::bind(&destruct<Foo>, foo_ptr);

请注意,一旦绑定,就不能将其转换为原始函数指针。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

测试类的析构函数是否分配了指针?

来自分类Dev

动态内存分配,指针成员和析构函数

来自分类Dev

指针的默认析构函数?

来自分类Dev

析构函数上的= delete如何防止堆栈分配?

来自分类Dev

析构函数调用和指针

来自分类Dev

析构函数调用和指针

来自分类Dev

删除析构函数中的指针

来自分类Dev

指向数组的指针的析构函数

来自分类Dev

如何定义析构函数?

来自分类Dev

析构函数如何工作?

来自分类Dev

C ++分配和析构函数

来自分类Dev

如何为析构函数指定nothrow异常说明符?

来自分类Dev

如何为析构函数指定nothrow异常说明符?

来自分类Dev

提升共享指针构造函数的析构函数

来自分类Dev

静态成员变量的构造函数和析构函数(指针)

来自分类Dev

返回的结构调用它自己的析构函数,该析构函数销毁分配的对象

来自分类Dev

vector :: clear如何在不丢失分配的内存的情况下调用析构函数

来自分类Dev

如何在不调用析构函数的情况下使向量重新分配?

来自分类Dev

vector :: clear如何在不丢失分配的内存的情况下调用析构函数

来自分类Dev

如何在移动分配运算符中调用析构函数?

来自分类Dev

如何强制定义析构函数

来自分类Dev

如何指定析构函数调用的顺序?

来自分类Dev

析构函数中的析构函数?

来自分类Dev

智能指针析构函数调用的向量

来自分类Dev

删除void指针时不调用析构函数

来自分类Dev

是否需要在析构函数中删除指针?

来自分类Dev

通过基本指针的C ++显式析构函数调用

来自分类Dev

析构函数中的访问冲突“删除”指针

来自分类Dev

C ++:为什么析构函数的设计不像删除指针?

Related 相关文章

热门标签

归档