From 5cb7ae0b86608db86c3866f5371b844d726becd1 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sat, 22 Jun 2013 19:36:42 +0900 Subject: [PATCH] Use std::unique_ptr in SingletonHolder --- src/MultiUrlRequestInfo.cc | 3 +-- src/SingletonHolder.h | 12 ++++++------ test/SingletonHolderTest.cc | 5 +++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/MultiUrlRequestInfo.cc b/src/MultiUrlRequestInfo.cc index c7839acf..e99d4f7d 100644 --- a/src/MultiUrlRequestInfo.cc +++ b/src/MultiUrlRequestInfo.cc @@ -137,8 +137,7 @@ int MultiUrlRequestInfo::prepare() { global::globalHaltRequested = 0; try { - std::shared_ptr notifier(new Notifier()); - SingletonHolder::instance(notifier); + SingletonHolder::instance(make_unique()); #ifdef ENABLE_SSL if(option_->getAsBool(PREF_ENABLE_RPC) && diff --git a/src/SingletonHolder.h b/src/SingletonHolder.h index 323773aa..be9a4854 100644 --- a/src/SingletonHolder.h +++ b/src/SingletonHolder.h @@ -44,20 +44,20 @@ namespace aria2 { template class SingletonHolder { private: - static std::shared_ptr instance_; + static std::unique_ptr instance_; SingletonHolder() {} public: ~SingletonHolder() {} - static const std::shared_ptr& instance() + static T* instance() { - return instance_; + return instance_.get(); } - static void instance(const std::shared_ptr& instance) + static void instance(std::unique_ptr&& ptr) { - instance_ = instance; + instance_ = std::move(ptr); } static void clear() @@ -67,7 +67,7 @@ public: }; template -std::shared_ptr SingletonHolder::instance_; +std::unique_ptr SingletonHolder::instance_; } // namespace aria2 diff --git a/test/SingletonHolderTest.cc b/test/SingletonHolderTest.cc index f9793616..052fbf26 100644 --- a/test/SingletonHolderTest.cc +++ b/test/SingletonHolderTest.cc @@ -4,6 +4,8 @@ #include +#include "a2functional.h" + namespace aria2 { class SingletonHolderTest : public CppUnit::TestFixture { @@ -38,8 +40,7 @@ public: void SingletonHolderTest::testInstance() { - std::shared_ptr m(new M("Hello world.")); - SingletonHolder::instance(m); + SingletonHolder::instance(make_unique("Hello world.")); CPPUNIT_ASSERT_EQUAL(std::string("Hello world."), SingletonHolder::instance()->greeting());