gpt4 book ai didi

c++ - 在 boost::shared_ptr 完成时释放资源

转载 作者:行者123 更新时间:2023-11-30 04:37:38 25 4
gpt4 key购买 nike

我确实从库调用中收到了一个 shared_ptr,并将它和一些资源传回库中。只有当 shared_ptr 删除它的指针时,资源才能被删除:

std::ofstream* out = new std::ofstream(); 
...
shared_ptr<Lib::SomeClass> writer = Library.createWriter(out);

Library.appendWriter(writer);

图书馆希望我设法逃脱*,但没有告诉我什么时候这样做是安全的。本质上,如果 writer 被释放,我希望 out 被删除。

这可以使用 boost 的删除工具来实现吗?想法?

最佳答案

我认为您不能直接使用 shared_ptr API 来完成此操作。

如果 Lib::SomeClass 是接口(interface)/抽象基类,您可以使用 Decorator .这个想法是定义一个子类 Lib::SomeClass 的类, 包含一个 shared_ptr<Lib::SomeClass>和一个 std::ofstream* , 并且其方法都转发到包含的 shared_ptr 的相应方法。然而,装饰器的析构函数将删除包含的 ofstream。 (或者您可以将其存储在某种 RAII 容器中,例如 scoped_ptr )。所以它将是您传递给 appendWriter 的 Decorator 的一个实例。这是一个草图:

class SomeClassDecorator : public Lib::SomeClass
{
public:
SomeClassDecorator(shared_ptr<Lib::SomeClass> p, std::ofstream* stream)
: p_(p), stream_(stream)
{}

virtual int MethodOfSomeClass(int x) {
return p_->MethodOfSomeClass(x);
}

private:
shared_ptr<Lib::SomeClass> p_;
scoped_ptr<std::ofstream> stream_;
};

std::ofstream* out = new std::ofstream();
...
shared_ptr<Lib::SomeClass> writer = Library.createWriter(out);
shared_ptr<Lib::SomeClass> wrapper(new SomeClassDecorator(writer, out));

Library.appendWriter(wrapper);

关于c++ - 在 boost::shared_ptr 完成时释放资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3737516/

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