2015-12-10 3 views
2

В проекте C++ 11 я хотел бы использовать как можно больше stl-примитивов, а не boost. Я все же нуждаюсь в некоторых из ускорительных библиотек - например, файловой системы. Он, однако, использует boost :: shared_ptr.Могу ли я создавать библиотеки boost с помощью std :: shared_ptr вместо boost :: shared_ptr

Мой вопрос: есть ли способ повысить эффективность использования std :: shared_ptr и как?

+1

Почему вы хотите изменить внутреннюю часть форсирования? Используйте 'std :: shared_ptr' в своем коде и дайте возможность использовать все, что ему нужно. – vsoftco

+0

Внутренняя? Нет интерфейсов какой-либо библиотеки, которые ожидают или возвращают shared_ptr? – gsf

+0

@gsf: Функции принимают/возвращают 'shared_ptr', только если они передают право собственности на объект. Очень немногие библиотеки Boost на самом деле должны требовать права собственности на что-то, через которое проходит пользователь. Поэтому большинство параметров - это типы значений, ссылки или голые (не владеющие) указатели. В самом деле, я не могу думать о функции Boost, которая использует 'shared_ptr' в интерфейсе. –

ответ

2

У Boost есть настройка конфигурации, чтобы она использовала std::shared_ptr? Не в общем. Boost.Asio apparently has a way to make the internals use std::shared_ptr (который, кажется, включается автоматически, когда доступно std::shared_ptr). Но для этого не существует настроек Boost.

Возможно, вы можете сделать какую-то находку для замены гимнастики, чтобы она работала. Конечно, это предполагает, что ни одна из этих библиотек Boost не делает предположений о внутренних компонентах Boost. И что ни у кого из них нет доступа к его внутренностям. И что boost::shared_ptr не имеет различий в интерфейсе от std::shared_ptr.

Это не будет стоить усилий. Пусть Boost использует любой код, который он хочет для внутреннего использования. Единственное место, где это должно иметь для вас значение, - это интерфейсы, и очень немногие библиотеки Boost фактически используют boost::shared_ptr в интерфейсе к вашему коду. В самом деле, я сделал поиск в Google для std::shared_ptr в документации Boost 1.59, и единственное место, где я обнаружил, что оно даже упоминалось, было в документе, который я связал выше.

+1

Я * сильно * рекомендую вам не найти и заменить boost shared_ptr на std shared_ptr. Boost shared_ptr является сильным надмножеством C++ 11 shared_ptr, и, похоже, C++ 1y shared_ptr станет намного более похожим на Boost. Boost использует расширения C++ 1y, поэтому это не будет прямой обмен. –

+0

@NiallDouglas: Что такое C++ 1y? Вы говорите о C++ 14 или C++ 17 или что? –

+0

Да, вы правы, я имел в виду C++ 1z извинения. Это «C++ 17», хотя, конечно, любой улучшенный shared_ptr не будет использоваться как часть 1z, а скорее как некоторые предлагаемые библиотеки TS примерно в то же время. –

Смежные вопросы