У меня есть класс данных, где я обычно передаю объекты этого класса с помощью shared_ptr. Теперь я хотел бы попытаться отслеживать, сколько shared_ptr существует для объектов этого класса. Обратите внимание, что это не то же самое, что и количество указателей на конкретный объект. Прежде всего, я хочу, чтобы это помогло идентифицировать возможные утечки памяти, но также есть ситуации, когда знание фактического числа полезно.Количество числа shared_ptr в существовании
Одна из моих идей заключалась в том, чтобы сохранить статический список слабых указателей для каждого построенного shared_ptr. Затем я мог периодически проверять, насколько многие из слабых указателей остаются в силе. Проблема в том, как я могу автоматически добавлять слабый указатель на список каждый раз, когда создается shared_ptr? Будет ли работать пользовательский распределитель?
Кто-нибудь знает разумный способ сделать это?
Мне любопытно, какие полезные ситуации вы можете придумать для получения этой информации. ИМХО, эксплуатационные затраты на его реализацию намного превосходят любую выгоду. Утечки памяти следует отлаживать с помощью средств отладки вашей платформы, а общее количество объектов не очень полезно, потому что вы ничего не знаете о том, как они используются. Все ли они в одном контейнере? Если это так, просто используйте 'container.size()'. В противном случае, как вы знаете, сколько объектов используется каждой структурой контейнера/данных и т. Д.? Сколько объектов соответствует локальным переменным, временным и т. Д.? – bcrist
Эксплуатационные расходы очень относительны и стараются быть менее субъективными, если вы не знаете приложение. Прямо сейчас самое важное для меня - подтвердить, что мои алгоритмы делают то, что я ожидаю от них. Иногда приятно знать, есть ли у меня примерно 1000 объектов в памяти по сравнению с 100 000. Кроме того, для обнаружения утечки памяти производительность, попадающая на подсчет объектов, меньше, чем использование чего-то вроде valgrind (что нетривиально для установки для android). – ryan0270
Не предполагалось, чтобы judement был предназначен; Мне было любопытно. Мнения, высказанные мной, объясняются главным образом разработкой экосистем для настольных систем. Ваш вопрос о трудностях отладки мобильных приложений - это не то, о чем я думал, так что спасибо. – bcrist