I would like to enable support for C++0x in GCC with -std=c++0x
. I don\'t absolutely necessarily need any of the currently supported C++11 features in GCC 4.5 (
Aside from implementation consistency, boost::shared_ptr
currently retains at least two niche advantages over std::shared_ptr
:
boost::shared_ptr
's support for type-erased custom deleters, but doesn't yet do the same for std::shared_ptr.There are a couple of reasons to switch over to std::shared_ptr:
std::shared_ptr
and show the pointed to object directly, where it wouldn't for say, boost's implementation. At least in Visual Studio, std::shared_ptr
looks like a plain pointer in the debugger, while boost::shared_ptr
exposes a bunch of boost's innards.boost::shared_ptr
understands move semantics.std::shared_ptr
correctly uses delete []
on array types, while boost::shared_ptr
causes undefined behavior in such cases (you must use shared_array
or a custom deleter)unique_ptr
only, not shared_ptr
.)And one major glaring reason not to:
Finally, you don't really have to choose. (And if you're targeting a specific compiler series (e.g. MSVC and GCC), you could easily extend this to use std::tr1::shared_ptr
when available. Unfortunately there doesn't seem to be a standard way to detect TR1 support)
#if __cplusplus > 199711L
#include <memory>
namespace MyProject
{
using std::shared_ptr;
}
#else
#include <boost/shared_ptr.hpp>
namespace MyProject
{
using boost::shared_ptr;
}
#endif