From b3dd817d4f6a871b79ac95266b3ad9d26d4ca9f3 Mon Sep 17 00:00:00 2001 From: LSuper <120311070@qq.com> Date: Thu, 13 Jan 2022 10:59:16 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=AE=BE=E8=AE=A1?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F-=E5=8D=95=E4=BE=8B=E7=9A=84=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- design_pattern/singleton/README.md | 3 ++- design_pattern/singleton/dcl_singleton.cpp | 3 ++- design_pattern/singleton/static_local_singleton.cpp | 6 +++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/design_pattern/singleton/README.md b/design_pattern/singleton/README.md index 46018230..b91b82ed 100644 --- a/design_pattern/singleton/README.md +++ b/design_pattern/singleton/README.md @@ -114,7 +114,7 @@ private: static singleton *p; static mutex lock_; public: - singleton *instance(); + static singleton *instance(); // 实现一个内嵌垃圾回收类 class CGarbo @@ -131,6 +131,7 @@ public: singleton *singleton::p = nullptr; singleton::CGarbo Garbo; +std::mutex singleton::lock_; singleton* singleton::instance() { if (p == nullptr) { diff --git a/design_pattern/singleton/dcl_singleton.cpp b/design_pattern/singleton/dcl_singleton.cpp index 88278bb8..2b22d035 100644 --- a/design_pattern/singleton/dcl_singleton.cpp +++ b/design_pattern/singleton/dcl_singleton.cpp @@ -14,7 +14,7 @@ class singleton { static singleton *p; static mutex lock_; public: - singleton *instance(); + static singleton *instance(); // 实现一个内嵌垃圾回收类 class CGarbo @@ -31,6 +31,7 @@ class singleton { singleton *singleton::p = nullptr; singleton::CGarbo Garbo; +std::mutex singleton::lock_; singleton* singleton::instance() { if (p == nullptr) { diff --git a/design_pattern/singleton/static_local_singleton.cpp b/design_pattern/singleton/static_local_singleton.cpp index ddab782f..87626bcc 100644 --- a/design_pattern/singleton/static_local_singleton.cpp +++ b/design_pattern/singleton/static_local_singleton.cpp @@ -11,12 +11,12 @@ class singleton { static singleton *p; singleton() {} public: - singleton *instance(); + static singleton &instance(); }; -singleton *singleton::instance() { +singleton &singleton::instance() { static singleton p; - return &p; + return p; } From 646f9e183627d0cffed60decdcb579764586ed80 Mon Sep 17 00:00:00 2001 From: LSuper <120311070@qq.com> Date: Wed, 23 Feb 2022 17:04:09 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=E8=AE=BE=E8=AE=A1=E6=A8=A1=E5=BC=8FMe?= =?UTF-8?q?yers'=20Singleton=E5=8E=BB=E6=8E=89=E5=86=97=E4=BD=99=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=EF=BC=8C=E9=81=BF=E5=85=8D=E8=AF=AF=E5=AF=BC=E6=B7=B7?= =?UTF-8?q?=E6=B7=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- design_pattern/singleton/static_local_singleton.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/design_pattern/singleton/static_local_singleton.cpp b/design_pattern/singleton/static_local_singleton.cpp index 87626bcc..c178985c 100644 --- a/design_pattern/singleton/static_local_singleton.cpp +++ b/design_pattern/singleton/static_local_singleton.cpp @@ -1,5 +1,7 @@ // // Created by light on 20-2-7. +// 在C++11标准下,《Effective C++》提出了一种更优雅的单例模式实现,使用函数内的 local static 对象。 +// 这种方法也被称为Meyers' Singleton。 // #include @@ -8,7 +10,6 @@ using namespace std; class singleton { private: - static singleton *p; singleton() {} public: static singleton &instance();