В чем различия между общими указателями (такими как boost:: shared_ptr или новый std:: shared_ptr) и методами сбора мусора (например, реализованными на Java или С#)? Как я понимаю, общие указатели отслеживают, сколько раз переменные указывают на ресурс, и автоматически уничтожит ресурс, когда счетчик достигнет нуля. Тем не менее, я понимаю, что сборщик мусора также управляет ресурсами памяти, но требует дополнительных ресурсов для определения того, относится ли объект к прежнему объекту и не обязательно немедленно уничтожает ресурс.
Правильно ли я в своих предположениях, есть ли другие различия между использованием сборщиков мусора и общих указателей? Кроме того, почему кто-либо когда-либо использовал сборщик мусора через общий указатель, если они выполняют аналогичные задачи, но с различными показателями производительности?