Where is shared_ptr?

113,259

Solution 1

There are at least three places where you may find shared_ptr:

  1. If your C++ implementation supports C++11 (or at least the C++11 shared_ptr), then std::shared_ptr will be defined in <memory>.

  2. If your C++ implementation supports the C++ TR1 library extensions, then std::tr1::shared_ptr will likely be in <memory> (Microsoft Visual C++) or <tr1/memory> (g++'s libstdc++). Boost also provides a TR1 implementation that you can use.

  3. Otherwise, you can obtain the Boost libraries and use boost::shared_ptr, which can be found in <boost/shared_ptr.hpp>.

Solution 2

Boost Getting Started

If you want to use it from Boost TR1 instead

shared_ptr Example

Solution 3

for VS2008 with feature pack update, shared_ptr can be found under namespace std::tr1.

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

of

if you had boost installation path (for example @ C:\Program Files\Boost\boost_1_40_0) added to your IDE settings:

#include <boost/shared_ptr.hpp>

Solution 4

If your'e looking bor boost's shared_ptr, you could have easily found the answer by googling shared_ptr, following the links to the docs, and pulling up a complete working example such as this.

In any case, here is a minimalistic complete working example for you which I just hacked up:

#include <boost/shared_ptr.hpp>

struct MyGizmo
{
    int n_;
};

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

In order for the #include to find the header, the libraries obviously need to be in the search path. In MSVC, you set this in Project Settings>Configuration Properties>C/C++>Additional Include Directories. In my case, this is set to C:\Program Files (x86)\boost\boost_1_42

Share:
113,259

Related videos on Youtube

Jake
Author by

Jake

Updated on November 24, 2020

Comments

  • Jake
    Jake over 3 years

    I am so frustrated right now after several hours trying to find where shared_ptr is located. None of the examples I see show complete code to include the headers for shared_ptr (and working). Simply stating std, tr1 and <memory> is not helping at all! I have downloaded boosts and all but still it doesn't show up! Can someone help me by telling exactly where to find it?

    Thanks for letting me vent my frustrations!

    EDIT: I see my title has been changed. Sorry about that. So... it was also because it was not clear to me that shared_ptr is "C++ version dependant" --> that's why I did not state my environment --> therefore probably why it was so difficult for me to find it.

    I am working on MSVS2008.

    EDIT 2: I don't know why, but I was including [memory] and [boost/tr1/memory.hpp] and [boost/tr1/tr1/memory] while looking everywhere for the shared_ptr.. of course, i couldn't.

    Thanks for all the responses.

    • YeenFei
      YeenFei almost 14 years
      probably it will be helpful if you can state your setup correctly, like what compiler and boost version/installation path
    • Billy ONeal
      Billy ONeal almost 14 years
      Unless you're on C++0x, shared_ptr is not part of the standard. It's so common though that some will treat it as standard even though it's not in yet.
    • sbi
      sbi almost 14 years
      How do you think we should answer this question without knowing whether your environment is GCC for a 7.5bit dishwasher chip, a 128bit mainframe's proprietary compiler, or XCode's version of GCC?
    • Mital Vora
      Mital Vora over 12 years
      Just to add some info about the problem I faced.. If you want to compile with c++0x standard you need to add "-std=c++0x" as argument of g++.
    • HidekiAI
      HidekiAI about 8 years
      If you're on MSVC, then you just need "#include <memory>" (for gcc, I have a CMake Find() for searching so that I can declare preprocessor definition to include either <boost/shared_ptr.hpp> versus <tr1/shared_ptr.h> as first choice being tr1 over boost - note that boost is "hpp" while tr1 is ".h" - verified on Gentoo/Fedora/Debian - and of course make sure to also have #include <memory> for memory management separately)
  • Kate Gregory
    Kate Gregory almost 14 years
    For VS 2008, did you get the "feature pack" or did you install SP1? If so then part 2 here applies to you, use the namespace tr1.
  • Jake
    Jake almost 14 years
    Thanks. This works like magic. I don't know why, but I was including <memory> and <boost/tr1/memory.hpp> and <boost/tr1/tr1/memory> while looking everywhere for the shared_ptr.. of course, i couldn't. Thanks again.
  • hiwaylon
    hiwaylon over 11 years
    Having stepped away from C++ briefly I was surprised to find that (in clang v3.1) shared_ptr was still sitting in a tr1 namespace. Any thoughts on this?
  • James McNellis
    James McNellis over 11 years
    @hiwaylon: Are you compiling with -std=c++11?
  • hiwaylon
    hiwaylon over 11 years
    @JamesMcNellis Yessir, unfortunately that caused some unhappiness with other dependencies and I was unable to continue (given time constraints). If -std=c++11 is the trick, I can continue with confidence when I am able to return to the project. Thank you.
  • yano
    yano over 6 years
    kinda already mentioned, but #include <memory> along with std::shared_ptr only worked for me after explicitly adding the -std=c++11 flag to g++ version 5.3.1