Как я вижу, умные указатели широко используются во многих реальных проектах C ++.
Хотя некоторые интеллектуальные указатели, очевидно, полезны для поддержки RAII и передачи прав собственности, также существует тенденция использования общих указателей по умолчанию в качестве способа «сборки мусора» , так что программисту не нужно слишком много думать о распределении ,
Почему общие указатели более популярны, чем интеграция надлежащего сборщика мусора, такого как Boehm GC ? (Или вы согласны с тем, что они более популярны, чем реальные GC?)
Я знаю о двух преимуществах обычных GC перед подсчетом ссылок:
- Обычные алгоритмы GC не имеют проблем с референтными циклами .
- Подсчет ссылок, как правило, медленнее, чем правильный сборщик мусора.
Каковы причины использования интеллектуальных указателей для подсчета ссылок?
std::unique_ptr
достаточно, и поэтому он имеет нулевые накладные расходы по сравнению с необработанными указателями с точки зрения производительности во время выполнения. Используяstd::shared_ptr
везде, вы также затеняли бы семантику владения, потеряв одно из основных преимуществ интеллектуальных указателей, помимо автоматического управления ресурсами - четкое понимание цели, стоящей за кодом.