в описании к сабжу написано что они искользует вызовы к функциям intrusive_ptr_add_ref & intrusive_ptr_release для сче5тчика ссылок. дело в том, что в бусте я этих функций не нашел. Интересно, их что надо самому писать?
Если да, то не могли бы вы привести примеры их удачных реализаций, или ткните меня носом =)
Здравствуйте, yxiie, Вы писали:
Y>Здравствуйте!
Y>в описании к сабжу написано что они искользует вызовы к функциям intrusive_ptr_add_ref & intrusive_ptr_release для сче5тчика ссылок. дело в том, что в бусте я этих функций не нашел. Интересно, их что надо самому писать?
Да, самому. Y>Если да, то не могли бы вы привести примеры их удачных реализаций, или ткните меня носом =)
Здравствуйте, yxiie, Вы писали:
Y>Здравствуйте!
Y>в описании к сабжу написано что они искользует вызовы к функциям intrusive_ptr_add_ref & intrusive_ptr_release для сче5тчика ссылок. дело в том, что в бусте я этих функций не нашел. Интересно, их что надо самому писать?
Естественно — откуда бустовцы знают, как у тебя происходит изменение счетчика ссылок?!
Y>Если да, то не могли бы вы привести примеры их удачных реализаций, или ткните меня носом =)
Вот простейший пример:
template<typename T>
void intrusive_ptr_add_ref(T* ptr)
{
ptr->add_ref();
}
template<typename T>
void intrusive_ptr_release(T* ptr)
{
if(!ptr->release())
delete ptr;
}
class test
{
int ref_cnt_;
test(const test&);
test& operator = (const test&);
public:
test() : ref_cnt_(0) {}
~test() { std::cerr << "~test() " << std::endl; }
int add_ref() { return ++ref_cnt_; }
int release() { return --ref_cnt_; }
};
int main()
{
test* p = 0;
boost::intrusive_ptr<test> ptr;
{
p = new test();
boost::intrusive_ptr<test> ptr2(p);
ptr = ptr2;
}
return 0;
}
Дело в том что вопрос скорости стоит очень жестко. Может кто-то сталкивался с необходимостью *быстрого* подсчеста ссылок. Был бы рад упидеть исходник. Да и еще какая разница между intrusive_ptr и shared_ptr особенно в плане скорости?
Здравствуйте, Bell, Вы писали:
B>Естественно — откуда бустовцы знают, как у тебя происходит изменение счетчика ссылок?!
+1 Y>>Если да, то не могли бы вы привести примеры их удачных реализаций, или ткните меня носом =)
B>Вот простейший пример:
А вот шаблонами я бы их делать не стал... Боком выходит когда в программе встречается несколько типов подсчета ссылок.
... << RSDN@Home 1.1.3 beta 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>А вот шаблонами я бы их делать не стал... Боком выходит когда в программе встречается несколько типов подсчета ссылок.
Но ведь никто не запрещает перегрузить эти функции, если такая необходимость возникнет
А вообще это как реализация поведения по умолчанию виртуальных функций базового класса — иногда нужно иметь умолчательное поведение, а иногда просто противопоказано.
Все определяется конкретными условиями, ИМХО.