Where is shared_ptr?
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 b开发者_JAVA百科een 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.
There are at least three places where you may find shared_ptr
:
If your C++ implementation supports C++11 (or at least the C++11
shared_ptr
), thenstd::shared_ptr
will be defined in<memory>
.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.Otherwise, you can obtain the Boost libraries and use
boost::shared_ptr
, which can be found in<boost/shared_ptr.hpp>
.
Boost Getting Started
If you want to use it from Boost TR1 instead
shared_ptr Example
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>
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
精彩评论