【发布时间】:2013-03-23 04:37:37
【问题描述】:
我正在尝试用 boost 中的一些替代方法替换 Poco::AutoPtr。以下是我目前发现的:
我所拥有的:Poco::AutoPtr 正在使用以下类。他们需要通过实现duplicate() 和release() 方法来实现引用计数方法。
我在具有多重继承和 c++ 菱形问题的复杂类层次结构中使用上述 referece_counted.h 和 Poco::AutoPtr。
类的简化版本如下所示
class A : virtual public ReferenceCounted
{
...
}
class B : public A
{
...
}
class C : public A
{
...
}
class D : public A, B
{
...
}
并且列表继续深入几个级别。我知道这需要使用简化的层次结构进行重构,但我想首先删除 Poco::AutoPtr,并在 boost 中进行适当替换:
到目前为止我发现了什么:
我发现boost::intrusive_ptr 是最接近的智能指针,可以很好地替代Poco::AutoPtr。
然而,我无法用这个实现正确的解决方案,因为 intrusive_ptr 需要专门为每个需要使用指针的类创建的 intrusive_ptr_add_ref 和 intrusive_ptr_release 方法。我尝试使用模板,但手头仍然没有合适的解决方案。
还有一个问题是我需要多次从基类类型转换到派生类。
intrusive_ptr 是这种用法的正确智能指针吗?如果是的话..有人可以给我关于如何使用它的建议吗?
【问题讨论】:
-
嗨。你找到解决办法了吗?
-
不..如果我尝试更改,我会疯狂崩溃..所以暂时我在我的代码中复制了 poco 类并替换了原子计数器。它工作正常atm。稍后我将进行第二次尝试。
标签: boost shared-ptr smart-pointers poco-libraries