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::intrusive_ptrが、 の適切な代替となる最も近いスマート ポインターであることがわかりましたPoco::AutoPtr
。
ただし、intrusive_ptr には、ポインターを使用する必要があるクラスごとに特別に作成された intrusive_ptr_add_ref および intrusive_ptr_release メソッドが必要なため、これで適切なソリューションを実装することはできません。テンプレートを使用してみましたが、まだ適切な解決策が手元にありません。
また、もう 1 つの問題は、基本クラスから派生クラスに何度も型キャストする必要があることです。
intrusive_ptr は、この使用法に適したスマート ポインターですか? はいの場合..同じものを使用する方法について誰かが私に提案できますか?