В чем разница между интеллектуальными указателями Boost и интеллектуальными указателями STD?

Итак, я бы хотел использовать умные указатели вместо raw, и почти каждая тема в SO говорит о библиотеке Boost. Но у std есть такие вещи как std::auto_ptr а также std::shared_ptr,
Почему Boost? В чем разница?

Речь шла не о разнице в реализации, а о причинах использования указателей Boost. Я полагаю, что данный ответ, включая дату ответа и контекст, является достаточно полезным. Это помогает понять, как указатели Boost были добавлены в std.

10

Решение

В основном Boost сделал shared_ptr первый. Вы можете заметить, что многие из новых контейнерных классов в C ++ 11 были в Boost давно. Я ожидаю, что этот шаблон будет продолжен и в следующих версиях стандарта C ++. Boost поддерживает старые компиляторы C ++, которые не говорят на C ++ 11, что является большим преимуществом.

Кстати, любое использование std::auto_ptr Настоятельно не рекомендуется (прямой запрет. Многие считают, что любое использование std::auto_ptr быть ошибкой.) и std::auto_ptr устарела в C ++ 11 и удалена в C ++ 17.

Что приносит std::shared_ptr а также std::unique_ptr вместо этого, которые оба значительно более полезны.

19

Другие решения

Что ж, std::shared_ptr а также boost:shared_ptr оба указателя подсчета ссылок. Вместо этого std :: auto_ptr работает совсем по-другому. Разница между std::shared_ptr а также boost:shared_ptr очень маленький и в основном исторический. До C ++ 11 не было std::shared_ptr и только boost:shared_ptr, Когда C ++ 11 был разработан, они взяли boost:shared_ptr как модель.

Все ваши упомянутые умные указатели имеют общее, что у них есть свой собственный механизм, обеспечивающий правильное управление временем жизни для точек. auto_ptr работает так, что если у вас есть несколько экземпляров auto_ptr тогда только один из них содержит указатель на реальный объект. Всякий раз, когда вы создаете auto_ptr От другого auto_ptr, тогда новый укажет на объект, а старый на NULL, С другой стороны, с shared_ptr может быть несколько shared_ptr экземпляры, которые совместно используют один и тот же объект, только когда последний выходит из области видимости, только тогда объект удаляется.

В C ++ 11 есть аналогичный тип указателя на std::auto_ptrа именно std::unique_ptr, но есть некоторые важные различия, см. также
std :: auto_ptr в std :: unique_ptr.

Рекомендации:

4
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector