Are You Using make_shared Yet?
Recently, while watching the GoingNative conference, I learned about the new
std::shared_ptr helper function
std::make_shared. In the talk Stephan T. Lavavej discusses the performance improvements they've made. It seems
std::make_shared can save a few extra allocations and a bit of memory overhead. This can be significant if you dynamically create lots of objects.
Back in the real world I found myself wondering if boost supported this little gem for
boost::shared_ptr. Seems it does. And has since 1.39.0 in 2009. How is it possible that I've overlooked this?
Instead of doing this:
std::shared_ptr<MyClass> ptr2(new MyClass(param1, param2));
std::shared_ptr<MyClass> ptr2 = std::make_shared<MyClass>(param1, param2);
Where this really shines is if you have a function expecting a
// Instead of this:
somefunc(std::shared_ptr<MyClass>(new MyClass(param1, param2)));
// do this:
Similar functions exist for the other types of smart pointers.
Related boost docs are here.