Где shared_ptr?

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

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

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

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

ИЗМЕНИТЬ 2: Я не знаю, почему, но я включил [память] и [boost/tr1/memory.hpp] и [boost/tr1/tr1/memory], глядя повсюду в shared_ptr.. конечно, я не мог.

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

Ответ 1

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

  • Если ваша реализация на С++ поддерживает С++ 11 (или, по крайней мере, С++ 11 shared_ptr), то std::shared_ptr будет определена в <memory>.

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

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

Ответ 3

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

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

о

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

#include <boost/shared_ptr.hpp>

Ответ 4

Если вы ищете bor boost 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 вы устанавливаете это в настройках проектa > Свойства конфигурации > C/С++ > Дополнительные каталоги включения. В моем случае это значение равно C:\Program Files (x86)\boost\boost_1_42