Commit 9b980c75 authored by Yedidya Feldblum's avatar Yedidya Feldblum Committed by Sara Golemon

to_shared_ptr.

Summary: [Folly] to_shared_ptr.

So you can write this:

    auto sptr = to_shared_ptr(getSomethingUnique<T>());

Instead of this:

    auto sptr = shared_ptr<T>(getSomethingUnique<T>());

Useful when `T` is long, such as `T = foobar::cpp2::FooBarServiceAsyncClient`.

Reviewed By: @meyering

Differential Revision: D2193572
parent 06557e1f
......@@ -56,6 +56,29 @@ typename std::enable_if<
std::extent<T>::value != 0, std::unique_ptr<T, Dp>>::type
make_unique(Args&&...) = delete;
/**
* to_shared_ptr
*
* Convert unique_ptr to shared_ptr without specifying the template type
* parameter and letting the compiler deduce it.
*
* So you can write this:
*
* auto sptr = to_shared_ptr(getSomethingUnique<T>());
*
* Instead of this:
*
* auto sptr = shared_ptr<T>(getSomethingUnique<T>());
*
* Useful when `T` is long, such as:
*
* using T = foobar::cpp2::FooBarServiceAsyncClient;
*/
template <typename T>
std::shared_ptr<T> to_shared_ptr(std::unique_ptr<T>&& ptr) {
return std::shared_ptr<T>(std::move(ptr));
}
/**
* A SimpleAllocator must provide two methods:
*
......
......@@ -25,6 +25,13 @@
using namespace folly;
TEST(shared_ptr, example) {
auto uptr = make_unique<std::string>("hello");
auto sptr = to_shared_ptr(std::move(uptr));
EXPECT_EQ(nullptr, uptr);
EXPECT_EQ("hello", *sptr);
}
template <std::size_t> struct T {};
template <std::size_t> struct S {};
template <std::size_t> struct P {};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment