web-dev-qa-db-fra.com

Où est shared_ptr?

Je suis tellement frustré après plusieurs heures passées à chercher où se trouve shared_ptr. Aucun des exemples que je vois ne montre un code complet pour inclure les en-têtes de shared_ptr (Et travaillant). Déclarant simplement std, tr1 et <memory> n'aide pas du tout! J'ai téléchargé des boosts et tout mais ça ne s'affiche toujours pas! Quelqu'un peut-il m'aider en me disant exactement où le trouver?

Merci de m'avoir laissé exprimer mes frustrations!

EDIT: Je vois que mon titre a été changé. Désolé pour ça. Donc ... c'était aussi parce qu'il n'était pas clair pour moi que shared_ptr est "dépendant de la version C++" -> c'est pourquoi je n'ai pas énoncé mon environnement -> donc probablement pourquoi il était si difficile pour moi de le trouver.

Je travaille sur MSVS2008.

EDIT 2: Je ne sais pas pourquoi, mais j’avais inclus [memory] et [boost/tr1/memory.hpp] et [boost/tr1/tr1/memory] tout en cherchant partout le shared_ptr .. bien sûr, je ne pouvais pas 't.

Merci pour toutes les réponses.

100
Jake

Il y a au moins trois endroits où vous pouvez trouver shared_ptr:

  1. Si votre implémentation C++ prend en charge C++ 11 (ou au moins C++ 11 shared_ptr), puis std::shared_ptr sera défini dans <memory>.

  2. Si votre implémentation C++ prend en charge les extensions de bibliothèque C++ TR1, alors std::tr1::shared_ptr sera probablement dans <memory> (Microsoft Visual C++) ou <tr1/memory> _ (libstdc ++ de g ++). Boost fournit également une implémentation TR1 que vous pouvez utiliser.

  3. Sinon, vous pouvez obtenir les bibliothèques Boost et utiliser boost::shared_ptr, qui peut être trouvé dans <boost/shared_ptr.hpp>.

166
James McNellis
7
Firas Assaad

pour VS2008 avec mise à jour du module de fonctions, shared_ptr peut être trouvé sous l'espace de noms std :: tr1.

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

de

si vous aviez le chemin d'installation boost (par exemple @ C:\Program Files\Boost\boost_1_40_0) ajouté à vos paramètres IDE:

#include <boost/shared_ptr.hpp>
6
YeenFei

Si vous êtes à la recherche de bor boost 's shared_ptr , vous auriez facilement trouvé la réponse en googler shared_ptr , en suivant les liens vers la documentation, et en tirant un exemple de travail complet tel que this .

En tout cas, voici un exemple de travail complet minimaliste que je viens de pirater:

#include <boost/shared_ptr.hpp>

struct MyGizmo
{
    int n_;
};

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

Pour que #include Trouve l'en-tête, les bibliothèques doivent évidemment se trouver dans le chemin de recherche. Dans MSVC, vous définissez ceci dans Paramètres du projet> Propriétés de configuration> C/C++> Répertoires d'inclusion supplémentaires. Dans mon cas, il est défini sur C:\Program Files (x86)\boost\boost_1_42

3
John Dibling