{"id":19134,"date":"2024-03-15T18:19:19","date_gmt":"2024-03-15T18:19:19","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/how-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/"},"modified":"2024-03-21T14:58:29","modified_gmt":"2024-03-21T14:58:29","slug":"how-is-the-implementation-of-the-singleton-design-pattern-in-c-done","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/how-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/","title":{"rendered":"How is the implementation of the singleton design pattern in C++ done?"},"content":{"rendered":"<p>There are multiple ways to implement the singleton pattern in C++, here are two commonly used methods:<\/p>\n<ol>\n<li>The Singleton pattern with lazy initialization.<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code>class Singleton {\r\nprivate:\r\n    static Singleton* instance;\r\n    Singleton() {}  \/\/ \u79c1\u6709\u6784\u9020\u51fd\u6570\r\n    \r\npublic:\r\n    static Singleton* getInstance() {\r\n        if (instance == nullptr) {\r\n            instance = new Singleton();\r\n        }\r\n        return instance;\r\n    }\r\n};\r\n\r\nSingleton* Singleton::instance = nullptr;\r\n<\/code><\/pre>\n<p>In the eager singleton pattern, the instance is already created when the program starts, and the getInstance() method directly returns that instance. If delayed instantiation is needed, it can be implemented by adding logic for checking and instantiation within the getInstance() method.<\/p>\n<ol>\n<li>Lazy Singleton Design Pattern<\/li>\n<\/ol>\n<pre class=\"post-pre\"><code>class Singleton {\r\nprivate:\r\n    static Singleton* instance;\r\n    Singleton() {}  \/\/ \u79c1\u6709\u6784\u9020\u51fd\u6570\r\n    \r\npublic:\r\n    static Singleton* getInstance() {\r\n        if (instance == nullptr) {\r\n            instance = new Singleton();\r\n        }\r\n        return instance;\r\n    }\r\n};\r\n\r\nSingleton* Singleton::instance = nullptr;\r\n<\/code><\/pre>\n<p>In the lazy singleton design pattern, the instance is created when the getInstance() method is first called, and attention should be paid to the thread safety issues in a multi-threaded environment. Lock mechanism or double-check locking mechanism can be used to ensure thread safety.<\/p>\n<p>It is important to note that both of the above methods require setting the default constructor as private to prevent direct instantiation of objects elsewhere.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>There are multiple ways to implement the singleton pattern in C++, here are two commonly used methods: The Singleton pattern with lazy initialization. class Singleton { private: static Singleton* instance; Singleton() {} \/\/ \u79c1\u6709\u6784\u9020\u51fd\u6570 public: static Singleton* getInstance() { if (instance == nullptr) { instance = new Singleton(); } return instance; } }; Singleton* Singleton::instance [&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-19134","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 is the implementation of the singleton design pattern in C++ done? - 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-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How is the implementation of the singleton design pattern in C++ done?\" \/>\n<meta property=\"og:description\" content=\"There are multiple ways to implement the singleton pattern in C++, here are two commonly used methods: The Singleton pattern with lazy initialization. class Singleton { private: static Singleton* instance; Singleton() {} \/\/ \u79c1\u6709\u6784\u9020\u51fd\u6570 public: static Singleton* getInstance() { if (instance == nullptr) { instance = new Singleton(); } return instance; } }; Singleton* Singleton::instance [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/how-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/\" \/>\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:19:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-21T14:58:29+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-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/\"},\"author\":{\"name\":\"Jackson Davis\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/55a10b8b0457c35884c25677889ad350\"},\"headline\":\"How is the implementation of the singleton design pattern in C++ done?\",\"datePublished\":\"2024-03-15T18:19:19+00:00\",\"dateModified\":\"2024-03-21T14:58:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/\"},\"wordCount\":150,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/how-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/\",\"name\":\"How is the implementation of the singleton design pattern in C++ done? - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-15T18:19:19+00:00\",\"dateModified\":\"2024-03-21T14:58:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/how-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How is the implementation of the singleton design pattern in C++ done?\"}]},{\"@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 is the implementation of the singleton design pattern in C++ done? - 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-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/","og_locale":"en_US","og_type":"article","og_title":"How is the implementation of the singleton design pattern in C++ done?","og_description":"There are multiple ways to implement the singleton pattern in C++, here are two commonly used methods: The Singleton pattern with lazy initialization. class Singleton { private: static Singleton* instance; Singleton() {} \/\/ \u79c1\u6709\u6784\u9020\u51fd\u6570 public: static Singleton* getInstance() { if (instance == nullptr) { instance = new Singleton(); } return instance; } }; Singleton* Singleton::instance [&hellip;]","og_url":"https:\/\/www.silicloud.com\/blog\/how-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-15T18:19:19+00:00","article_modified_time":"2024-03-21T14:58:29+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-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/how-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/"},"author":{"name":"Jackson Davis","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/55a10b8b0457c35884c25677889ad350"},"headline":"How is the implementation of the singleton design pattern in C++ done?","datePublished":"2024-03-15T18:19:19+00:00","dateModified":"2024-03-21T14:58:29+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/how-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/"},"wordCount":150,"commentCount":0,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/how-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/","url":"https:\/\/www.silicloud.com\/blog\/how-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/","name":"How is the implementation of the singleton design pattern in C++ done? - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-15T18:19:19+00:00","dateModified":"2024-03-21T14:58:29+00:00","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/how-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/how-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/how-is-the-implementation-of-the-singleton-design-pattern-in-c-done\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How is the implementation of the singleton design pattern in C++ done?"}]},{"@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\/19134","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=19134"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/19134\/revisions"}],"predecessor-version":[{"id":52859,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/19134\/revisions\/52859"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=19134"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=19134"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=19134"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}