{"id":25239,"date":"2024-03-16T04:34:24","date_gmt":"2024-03-16T04:34:24","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/how-to-use-singleton-objects-in-the-c-language\/"},"modified":"2024-03-22T05:41:34","modified_gmt":"2024-03-22T05:41:34","slug":"how-to-use-singleton-objects-in-the-c-language","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/how-to-use-singleton-objects-in-the-c-language\/","title":{"rendered":"How to use singleton objects in the C language?"},"content":{"rendered":"<p>In C language, there is no built-in concept of a singleton object, but the singleton pattern can be implemented through coding.<\/p>\n<p>The purpose of the singleton pattern is to ensure that only one instance object is created in the program and to provide a global way to access that object.<\/p>\n<p>Here is one common way to implement the Singleton pattern:<\/p>\n<ol>\n<li>Create a static variable to store a pointer to the singleton object.<\/li>\n<li>Create a function to fetch a singleton object. The function should check if a static variable has already been initialized, if so, it should return the value of the static variable; if not, it should create a new object, assign it to the static variable, and then return the object.<\/li>\n<li>Call the function to retrieve the singleton object&#8217;s pointer wherever it is needed.<\/li>\n<\/ol>\n<p>For example, here is a simple example to implement the singleton pattern:<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-meta\">#<span class=\"hljs-keyword\">include<\/span> <span class=\"hljs-string\">&lt;stdio.h&gt;<\/span><\/span>\r\n\r\n<span class=\"hljs-comment\">\/\/ \u5b9a\u4e49\u5355\u4f8b\u5bf9\u8c61\u7684\u7ed3\u6784\u4f53<\/span>\r\n<span class=\"hljs-keyword\">typedef<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">struct<\/span> {<\/span>\r\n    <span class=\"hljs-type\">int<\/span> value;\r\n} Singleton;\r\n\r\n<span class=\"hljs-comment\">\/\/ \u5b9a\u4e49\u9759\u6001\u53d8\u91cf\u6765\u4fdd\u5b58\u5355\u4f8b\u5bf9\u8c61\u7684\u6307\u9488<\/span>\r\n<span class=\"hljs-type\">static<\/span> Singleton *singleton = <span class=\"hljs-literal\">NULL<\/span>;\r\n\r\n<span class=\"hljs-comment\">\/\/ \u83b7\u53d6\u5355\u4f8b\u5bf9\u8c61\u7684\u51fd\u6570<\/span>\r\nSingleton* <span class=\"hljs-title function_\">getSingleton<\/span><span class=\"hljs-params\">()<\/span> {\r\n    <span class=\"hljs-keyword\">if<\/span> (singleton == <span class=\"hljs-literal\">NULL<\/span>) {\r\n        <span class=\"hljs-comment\">\/\/ \u5982\u679c\u9759\u6001\u53d8\u91cf\u672a\u88ab\u521d\u59cb\u5316\uff0c\u5219\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u5bf9\u8c61<\/span>\r\n        singleton = <span class=\"hljs-built_in\">malloc<\/span>(<span class=\"hljs-keyword\">sizeof<\/span>(Singleton));\r\n        singleton-&gt;value = <span class=\"hljs-number\">0<\/span>;\r\n    }\r\n    <span class=\"hljs-keyword\">return<\/span> singleton;\r\n}\r\n\r\n<span class=\"hljs-type\">int<\/span> <span class=\"hljs-title function_\">main<\/span><span class=\"hljs-params\">()<\/span> {\r\n    Singleton *obj1 = getSingleton();\r\n    Singleton *obj2 = getSingleton();\r\n\r\n    obj1-&gt;value = <span class=\"hljs-number\">10<\/span>;\r\n    <span class=\"hljs-built_in\">printf<\/span>(<span class=\"hljs-string\">\"obj1 value: %d\\n\"<\/span>, obj1-&gt;value);\r\n    <span class=\"hljs-built_in\">printf<\/span>(<span class=\"hljs-string\">\"obj2 value: %d\\n\"<\/span>, obj2-&gt;value);\r\n\r\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-number\">0<\/span>;\r\n}\r\n<\/code><\/pre>\n<p>Output:<\/p>\n<pre class=\"post-pre\"><code>obj1 value: 10\r\nobj2 value: 10\r\n<\/code><\/pre>\n<p>In this example, the getSingleton function is used to fetch a pointer to a singleton object. If the object has not been initialized yet, the function will create a new object and assign it to the static variable singleton. Each time the getSingleton function is called, it will return a pointer to the same object. Therefore, obj1 and obj2 point to the same object, and their value attributes will remain consistent.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In C language, there is no built-in concept of a singleton object, but the singleton pattern can be implemented through coding. The purpose of the singleton pattern is to ensure that only one instance object is created in the program and to provide a global way to access that object. Here is one common way [&hellip;]<\/p>\n","protected":false},"author":8,"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-25239","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 use singleton objects in the C language? - 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-use-singleton-objects-in-the-c-language\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to use singleton objects in the C language?\" \/>\n<meta property=\"og:description\" content=\"In C language, there is no built-in concept of a singleton object, but the singleton pattern can be implemented through coding. The purpose of the singleton pattern is to ensure that only one instance object is created in the program and to provide a global way to access that object. Here is one common way [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/how-to-use-singleton-objects-in-the-c-language\/\" \/>\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-16T04:34:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-22T05:41:34+00:00\" \/>\n<meta name=\"author\" content=\"William Carter\" \/>\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=\"William Carter\" \/>\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-use-singleton-objects-in-the-c-language\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-singleton-objects-in-the-c-language\/\"},\"author\":{\"name\":\"William Carter\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/f697031891aacefc4b681d139781d3c0\"},\"headline\":\"How to use singleton objects in the C language?\",\"datePublished\":\"2024-03-16T04:34:24+00:00\",\"dateModified\":\"2024-03-22T05:41:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-singleton-objects-in-the-c-language\/\"},\"wordCount\":229,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-singleton-objects-in-the-c-language\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-singleton-objects-in-the-c-language\/\",\"name\":\"How to use singleton objects in the C language? - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-16T04:34:24+00:00\",\"dateModified\":\"2024-03-22T05:41:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-singleton-objects-in-the-c-language\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/how-to-use-singleton-objects-in-the-c-language\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-singleton-objects-in-the-c-language\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to use singleton objects in the C language?\"}]},{\"@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\/f697031891aacefc4b681d139781d3c0\",\"name\":\"William Carter\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1786698071dd8d74bec894b512f9e3c610c3a2a32985f67e688976cee3c8bbef?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1786698071dd8d74bec894b512f9e3c610c3a2a32985f67e688976cee3c8bbef?s=96&d=mm&r=g\",\"caption\":\"William Carter\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/williamcarter\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to use singleton objects in the C language? - 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-use-singleton-objects-in-the-c-language\/","og_locale":"en_US","og_type":"article","og_title":"How to use singleton objects in the C language?","og_description":"In C language, there is no built-in concept of a singleton object, but the singleton pattern can be implemented through coding. The purpose of the singleton pattern is to ensure that only one instance object is created in the program and to provide a global way to access that object. Here is one common way [&hellip;]","og_url":"https:\/\/www.silicloud.com\/blog\/how-to-use-singleton-objects-in-the-c-language\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-16T04:34:24+00:00","article_modified_time":"2024-03-22T05:41:34+00:00","author":"William Carter","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"William Carter","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-singleton-objects-in-the-c-language\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-singleton-objects-in-the-c-language\/"},"author":{"name":"William Carter","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/f697031891aacefc4b681d139781d3c0"},"headline":"How to use singleton objects in the C language?","datePublished":"2024-03-16T04:34:24+00:00","dateModified":"2024-03-22T05:41:34+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-singleton-objects-in-the-c-language\/"},"wordCount":229,"commentCount":0,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-singleton-objects-in-the-c-language\/","url":"https:\/\/www.silicloud.com\/blog\/how-to-use-singleton-objects-in-the-c-language\/","name":"How to use singleton objects in the C language? - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-16T04:34:24+00:00","dateModified":"2024-03-22T05:41:34+00:00","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-singleton-objects-in-the-c-language\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/how-to-use-singleton-objects-in-the-c-language\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-singleton-objects-in-the-c-language\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to use singleton objects in the C language?"}]},{"@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\/f697031891aacefc4b681d139781d3c0","name":"William Carter","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1786698071dd8d74bec894b512f9e3c610c3a2a32985f67e688976cee3c8bbef?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1786698071dd8d74bec894b512f9e3c610c3a2a32985f67e688976cee3c8bbef?s=96&d=mm&r=g","caption":"William Carter"},"url":"https:\/\/www.silicloud.com\/blog\/author\/williamcarter\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/25239","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\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=25239"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/25239\/revisions"}],"predecessor-version":[{"id":59328,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/25239\/revisions\/59328"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=25239"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=25239"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=25239"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}