gpt4 book ai didi

c++ - 如何将析构函数分配给指针?

转载 作者:行者123 更新时间:2023-12-03 03:14:55 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com