{"id":19120,"date":"2024-03-15T18:17:59","date_gmt":"2024-03-15T18:17:59","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/"},"modified":"2024-03-21T14:56:30","modified_gmt":"2024-03-21T14:56:30","slug":"how-to-write-singleton-pattern-in-c","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/","title":{"rendered":"How to write singleton pattern in C++?"},"content":{"rendered":"<p>In C++, implementing the Singleton design pattern can be achieved using the following methods:<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">Singleton<\/span> {\r\n<span class=\"hljs-keyword\">private<\/span>:\r\n    <span class=\"hljs-comment\">\/\/ \u79c1\u6709\u6784\u9020\u51fd\u6570\uff0c\u9632\u6b62\u5916\u90e8\u521b\u5efa\u5bf9\u8c61<\/span>\r\n    <span class=\"hljs-built_in\">Singleton<\/span>() {}\r\n\r\n    <span class=\"hljs-comment\">\/\/ \u9759\u6001\u79c1\u6709\u6210\u5458\u53d8\u91cf\uff0c\u7528\u4e8e\u4fdd\u5b58\u5355\u4f8b\u5bf9\u8c61<\/span>\r\n    <span class=\"hljs-type\">static<\/span> Singleton* instance;\r\n\r\n<span class=\"hljs-keyword\">public<\/span>:\r\n    <span class=\"hljs-comment\">\/\/ \u9759\u6001\u516c\u6709\u6210\u5458\u51fd\u6570\uff0c\u7528\u4e8e\u83b7\u53d6\u5355\u4f8b\u5bf9\u8c61<\/span>\r\n    <span class=\"hljs-function\"><span class=\"hljs-type\">static<\/span> Singleton* <span class=\"hljs-title\">getInstance<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\r\n        <span class=\"hljs-keyword\">if<\/span> (instance == <span class=\"hljs-literal\">nullptr<\/span>) {\r\n            instance = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Singleton<\/span>();\r\n        }\r\n        <span class=\"hljs-keyword\">return<\/span> instance;\r\n    }\r\n};\r\n\r\n<span class=\"hljs-comment\">\/\/ \u521d\u59cb\u5316\u9759\u6001\u6210\u5458\u53d8\u91cf<\/span>\r\nSingleton* Singleton::instance = <span class=\"hljs-literal\">nullptr<\/span>;\r\n<\/code><\/pre>\n<p>In this implementation, setting the constructor to private prevents external creation of objects. By using static member variables and static member functions, a globally unique singleton object can be achieved and accessed through the getInstance function.<\/p>\n<p>It is important to note that this implementation is a simple lazy initialization singleton pattern, where the object is only created when the getInstance function is called for the first time. If thread safety is needed, locks can be used to ensure only one thread can create the object.<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">Singleton<\/span> {\r\n<span class=\"hljs-keyword\">private<\/span>:\r\n    <span class=\"hljs-comment\">\/\/ \u79c1\u6709\u6784\u9020\u51fd\u6570\uff0c\u9632\u6b62\u5916\u90e8\u521b\u5efa\u5bf9\u8c61<\/span>\r\n    <span class=\"hljs-built_in\">Singleton<\/span>() {}\r\n\r\n    <span class=\"hljs-comment\">\/\/ \u9759\u6001\u79c1\u6709\u6210\u5458\u53d8\u91cf\uff0c\u7528\u4e8e\u4fdd\u5b58\u5355\u4f8b\u5bf9\u8c61<\/span>\r\n    <span class=\"hljs-type\">static<\/span> Singleton* instance;\r\n    \r\n    <span class=\"hljs-comment\">\/\/ \u9759\u6001\u79c1\u6709\u6210\u5458\u53d8\u91cf\uff0c\u7528\u4e8e\u52a0\u9501<\/span>\r\n    <span class=\"hljs-type\">static<\/span> std::mutex mtx;\r\n\r\n<span class=\"hljs-keyword\">public<\/span>:\r\n    <span class=\"hljs-comment\">\/\/ \u9759\u6001\u516c\u6709\u6210\u5458\u51fd\u6570\uff0c\u7528\u4e8e\u83b7\u53d6\u5355\u4f8b\u5bf9\u8c61<\/span>\r\n    <span class=\"hljs-function\"><span class=\"hljs-type\">static<\/span> Singleton* <span class=\"hljs-title\">getInstance<\/span><span class=\"hljs-params\">()<\/span> <\/span>{\r\n        <span class=\"hljs-keyword\">if<\/span> (instance == <span class=\"hljs-literal\">nullptr<\/span>) {\r\n            <span class=\"hljs-function\">std::lock_guard&lt;std::mutex&gt; <span class=\"hljs-title\">lock<\/span><span class=\"hljs-params\">(mtx)<\/span><\/span>;\r\n            <span class=\"hljs-keyword\">if<\/span> (instance == <span class=\"hljs-literal\">nullptr<\/span>) {\r\n                instance = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Singleton<\/span>();\r\n            }\r\n        }\r\n        <span class=\"hljs-keyword\">return<\/span> instance;\r\n    }\r\n};\r\n\r\n<span class=\"hljs-comment\">\/\/ \u521d\u59cb\u5316\u9759\u6001\u6210\u5458\u53d8\u91cf<\/span>\r\nSingleton* Singleton::instance = <span class=\"hljs-literal\">nullptr<\/span>;\r\nstd::mutex Singleton::mtx;\r\n<\/code><\/pre>\n<p>In this implementation, std::mutex is used to achieve thread safety. When the getInstance function is called for the first time, std::lock_guard is used to lock the mtx, ensuring that only one thread can create the object.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In C++, implementing the Singleton design pattern can be achieved using the following methods: class Singleton { private: \/\/ \u79c1\u6709\u6784\u9020\u51fd\u6570\uff0c\u9632\u6b62\u5916\u90e8\u521b\u5efa\u5bf9\u8c61 Singleton() {} \/\/ \u9759\u6001\u79c1\u6709\u6210\u5458\u53d8\u91cf\uff0c\u7528\u4e8e\u4fdd\u5b58\u5355\u4f8b\u5bf9\u8c61 static Singleton* instance; public: \/\/ \u9759\u6001\u516c\u6709\u6210\u5458\u51fd\u6570\uff0c\u7528\u4e8e\u83b7\u53d6\u5355\u4f8b\u5bf9\u8c61 static Singleton* getInstance() { if (instance == nullptr) { instance = new Singleton(); } return instance; } }; \/\/ \u521d\u59cb\u5316\u9759\u6001\u6210\u5458\u53d8\u91cf Singleton* Singleton::instance = nullptr; In [&hellip;]<\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-19120","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to write singleton pattern in C++? - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to write singleton pattern in C++?\" \/>\n<meta property=\"og:description\" content=\"In C++, implementing the Singleton design pattern can be achieved using the following methods: class Singleton { private: \/\/ \u79c1\u6709\u6784\u9020\u51fd\u6570\uff0c\u9632\u6b62\u5916\u90e8\u521b\u5efa\u5bf9\u8c61 Singleton() {} \/\/ \u9759\u6001\u79c1\u6709\u6210\u5458\u53d8\u91cf\uff0c\u7528\u4e8e\u4fdd\u5b58\u5355\u4f8b\u5bf9\u8c61 static Singleton* instance; public: \/\/ \u9759\u6001\u516c\u6709\u6210\u5458\u51fd\u6570\uff0c\u7528\u4e8e\u83b7\u53d6\u5355\u4f8b\u5bf9\u8c61 static Singleton* getInstance() { if (instance == nullptr) { instance = new Singleton(); } return instance; } }; \/\/ \u521d\u59cb\u5316\u9759\u6001\u6210\u5458\u53d8\u91cf Singleton* Singleton::instance = nullptr; In [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-15T18:17:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-21T14:56:30+00:00\" \/>\n<meta name=\"author\" content=\"Jackson Davis\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:site\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jackson Davis\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/\"},\"author\":{\"name\":\"Jackson Davis\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/55a10b8b0457c35884c25677889ad350\"},\"headline\":\"How to write singleton pattern in C++?\",\"datePublished\":\"2024-03-15T18:17:59+00:00\",\"dateModified\":\"2024-03-21T14:56:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/\"},\"wordCount\":145,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/\",\"name\":\"How to write singleton pattern in C++? - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-15T18:17:59+00:00\",\"dateModified\":\"2024-03-21T14:56:30+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to write singleton pattern in C++?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"name\":\"Silicon Cloud Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\",\"name\":\"Silicon Cloud Blog\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"contentUrl\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"width\":1024,\"height\":1024,\"caption\":\"Silicon Cloud Blog\"},\"image\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\",\"https:\/\/twitter.com\/SiliCloudGlobal\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/55a10b8b0457c35884c25677889ad350\",\"name\":\"Jackson Davis\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2fdb47d6df1226e92380d96973782572a97b0675d098bb914410dec348eb5d29?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2fdb47d6df1226e92380d96973782572a97b0675d098bb914410dec348eb5d29?s=96&d=mm&r=g\",\"caption\":\"Jackson Davis\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/jacksondavis\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to write singleton pattern in C++? - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/","og_locale":"en_US","og_type":"article","og_title":"How to write singleton pattern in C++?","og_description":"In C++, implementing the Singleton design pattern can be achieved using the following methods: class Singleton { private: \/\/ \u79c1\u6709\u6784\u9020\u51fd\u6570\uff0c\u9632\u6b62\u5916\u90e8\u521b\u5efa\u5bf9\u8c61 Singleton() {} \/\/ \u9759\u6001\u79c1\u6709\u6210\u5458\u53d8\u91cf\uff0c\u7528\u4e8e\u4fdd\u5b58\u5355\u4f8b\u5bf9\u8c61 static Singleton* instance; public: \/\/ \u9759\u6001\u516c\u6709\u6210\u5458\u51fd\u6570\uff0c\u7528\u4e8e\u83b7\u53d6\u5355\u4f8b\u5bf9\u8c61 static Singleton* getInstance() { if (instance == nullptr) { instance = new Singleton(); } return instance; } }; \/\/ \u521d\u59cb\u5316\u9759\u6001\u6210\u5458\u53d8\u91cf Singleton* Singleton::instance = nullptr; In [&hellip;]","og_url":"https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-15T18:17:59+00:00","article_modified_time":"2024-03-21T14:56:30+00:00","author":"Jackson Davis","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Jackson Davis","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/"},"author":{"name":"Jackson Davis","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/55a10b8b0457c35884c25677889ad350"},"headline":"How to write singleton pattern in C++?","datePublished":"2024-03-15T18:17:59+00:00","dateModified":"2024-03-21T14:56:30+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/"},"wordCount":145,"commentCount":0,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/","url":"https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/","name":"How to write singleton pattern in C++? - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-15T18:17:59+00:00","dateModified":"2024-03-21T14:56:30+00:00","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/how-to-write-singleton-pattern-in-c\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to write singleton pattern in C++?"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/blog\/#website","url":"https:\/\/www.silicloud.com\/blog\/","name":"Silicon Cloud Blog","description":"","publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.silicloud.com\/blog\/#organization","name":"Silicon Cloud Blog","url":"https:\/\/www.silicloud.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","contentUrl":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","width":1024,"height":1024,"caption":"Silicon Cloud Blog"},"image":{"@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SiliCloudGlobal\/","https:\/\/twitter.com\/SiliCloudGlobal"]},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/55a10b8b0457c35884c25677889ad350","name":"Jackson Davis","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2fdb47d6df1226e92380d96973782572a97b0675d098bb914410dec348eb5d29?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2fdb47d6df1226e92380d96973782572a97b0675d098bb914410dec348eb5d29?s=96&d=mm&r=g","caption":"Jackson Davis"},"url":"https:\/\/www.silicloud.com\/blog\/author\/jacksondavis\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/19120","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=19120"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/19120\/revisions"}],"predecessor-version":[{"id":52844,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/19120\/revisions\/52844"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=19120"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=19120"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=19120"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}