标准库中是否有一个类将调用其析构函数中提供的函数?就像这样
class Foo
{
public:
template<typename T>
Foo(T callback)
{
_callback = callback;
}
~Foo()
{
_callback();
}
private:
std::function<void()> _callback;
};
auto rai = Foo([](){ cout << "dtor";});发布于 2022-10-28 16:02:33
发布于 2022-10-28 16:09:16
为此您可以使用std::shared_ptr。
std::shared_ptr<void>(nullptr, [](void*){ std::cout << "dtor\n";});在网上看。
std::shared_ptr调用删除器,即使托管指针是nullptr,因此不需要在其中使用任何虚拟指针。但是,就我个人而言,我会再次强烈关注以这种方式使用std::shared_ptr的问题,而且我可能不会让它通过审查。这是一个很大的问题(虽然它可能会成为一个成语,如果它在整个项目中使用)。
发布于 2022-10-28 16:18:30
为了实现它,我建议不要使用类型擦除的std::function。
下面是一个可能的实现
template<typename F>
struct scope_exit{
[[nodiscard]]
scope_exit(F&& f):f(std::move(f)){}
~scope_exit(){f();}
scope_exit(const scope_exit&)=delete;
scope_exit& operator=(const scope_exit&)=delete;
F f;
};https://stackoverflow.com/questions/74237761
复制相似问题