Где находится shared_ptr? - PullRequest
       31

Где находится shared_ptr?

100 голосов
/ 27 мая 2010

Я так расстроен сейчас, после нескольких часов, когда пытаюсь найти, где находится shared_ptr. Ни один из примеров, которые я вижу, не показывает полный код, включающий заголовки для shared_ptr (и работает). Простое указание std, tr1 и <memory> не помогает вообще! Я скачал повышения, и все, но все же это не обнаруживается! Может ли кто-нибудь помочь мне, точно указав, где его найти?

Спасибо, что позволили мне выразить свои разочарования!

EDIT: Я вижу, что мой заголовок был изменен. Извини за это. Итак ... это было также потому, что мне не было понятно, что shared_ptr "зависит от версии C ++" -> поэтому я не указал свою среду -> поэтому, вероятно, почему мне было так трудно ее найти.

Я работаю над MSVS2008.

РЕДАКТИРОВАТЬ 2: Я не знаю почему, но я включал [memory] и [boost / tr1 / memory.hpp] и [boost / tr1 / tr1 / memory], хотя везде искал shared_ptr .. конечно, я не мог.

Спасибо за все ответы.

Ответы [ 4 ]

165 голосов
/ 27 мая 2010

Есть как минимум три места, где вы можете найти shared_ptr:

  1. Если ваша реализация C ++ поддерживает C ++ 11 (или хотя бы C ++ 11 shared_ptr), тогда std::shared_ptr будет определено в <memory>.

  2. Если ваша реализация C ++ поддерживает расширения библиотеки C ++ TR1, то std::tr1::shared_ptr, вероятно, будет в <memory> (Microsoft Visual C ++) или <tr1/memory> (g ++ libstdc ++). Boost также предоставляет реализацию TR1, которую вы можете использовать.

  3. В противном случае вы можете получить библиотеки Boost и использовать boost::shared_ptr, который можно найти в <boost/shared_ptr.hpp>.

6 голосов
/ 27 мая 2010

для VS2008 с обновлением пакета функций, shared_ptr можно найти в пространстве имен std :: tr1.

std::tr1::shared_ptr<int> MyIntSmartPtr = new int;

из

если вы добавили путь для ускоренной установки (например, @ C:\Program Files\Boost\boost_1_40_0) в настройки IDE:

#include <boost/shared_ptr.hpp>
3 голосов
/ 27 мая 2010

Если вы ищете бор повышение shared_ptr , вы могли бы легко найти ответ по googling shared_ptr , следуя ссылкам на документы и вытащить полный рабочий пример, такой как this .

В любом случае, вот вам минималистичный полный рабочий пример, который я только что взломал:

#include <boost/shared_ptr.hpp>

struct MyGizmo
{
    int n_;
};

int main()
{
    boost::shared_ptr<MyGizmo> p(new MyGizmo);
    return 0;
}

Чтобы #include мог найти заголовок, библиотеки, очевидно, должны быть в пути поиска. В MSVC это устанавливается в «Параметры проекта»> «Свойства конфигурации»> «C / C ++»> «Дополнительные каталоги включения». В моем случае это установлено на C:\Program Files (x86)\boost\boost_1_42

...