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