Управляющий блок a shared_ptr
сохраняется в живых, пока присутствует хотя бы один weak_ptr
. Если общий указатель был создан с помощью make_shared
, это означает, что вся память объекта сохраняется. (Сам объект правильно разрушен, но поскольку блок управления и память для объекта были выделены в одном фрагменте, как это делает make_shared
, они могут быть освобождены только вместе.)
Правильно ли я понимаю?
Похоже, что это поведение представляет проблему, например, в знаменитом примере кеша. Память для объектов будет сохранена навсегда.
Это проблема в каких-то практических ситуациях? Должен ли shared_ptr
создать конструктор в такой ситуации (большой объект и намерение использовать weak_ptr
s)?