Я пытаюсь заменить Poco::AutoPtr
какой-то альтернативой в boost. Вот что я обнаружил до сих пор:
Что у меня есть: классы ниже используются с Poco::AutoPtr
. Им необходимо реализовать метод подсчета ссылок с реализацией методов duplicate()
и release()
.
Я использую выше 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 является правильным умным указателем для этого использования? и если да .. может ли кто-нибудь дать мне предложение относительно того, как использовать то же самое?