shared_ptr

Jun 21, 2015 19:41

У std::(boost::)shared_ptr в блоке, который хранит счетчик, есть ещё указатель на функцию удаления (deleter), который запоминается в момент создания shared_ptr
Это позволяет:
* не париться с виртуальным деструктором, если мы кастуем shared_ptr в shared_ptr (not recommended, если shared_ptr это не единственный указатель в проекте ( Read more... )

c++

Leave a comment

Comments 11

(The comment has been removed)

sergegers1 June 22 2015, 02:34:23 UTC
при создании передать в конструктор точный deleter

Reply

_winnie June 22 2015, 03:08:07 UTC
Дефолтный deleter уже достаточно точный

Reply

sergegers1 June 22 2015, 03:19:18 UTC
по моему яснее так

shared_ptr pb
{
new Derived{},
[](auto rawpb)
{
delete static_cast(rawpb);
}
};

Reply


borisovs June 22 2015, 07:55:34 UTC

loyso_b June 22 2015, 11:35:00 UTC
Остается только добавить, что make_shared делает все weak указатели "сильными" в терминах байтов под объект.

Reply

_winnie June 22 2015, 12:27:00 UTC
Угу.
Чтобы это стало важным - нужно к двум факторам make_shared+weak_ptr ещё и третий фактор - основное потребление ресурсов собственно телом объекта, огромные массивы прямо внутри (и массивы - это char[1000], а не vector, который хранит данные отдельно).

Reply


Leave a comment

Up