PageSourceSearch

https://renderdoc.space/assets/js/3-Singleton.html.d35d5cd0.js

js renderdoc.space collected 2026-10-03 23:23:54 UTC 64,830 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkrenderdoc=self.webpackChunkrenderdoc||[]).push([[6139],{15834:(n,s,a)=>{a.r(s),a.d(s,{comp:()=>q,data:()=>z});var e=a(20641);const t=a.p+"assets/img/sington.8c3aa75c.jpg",o=a.p+"assets/img/singletonc++.9aa16811.png",l=a.p+"assets/img/setsing.5189c2cf.png",c=a.p+"assets/img/setsingclass.3ccf416e.png",p=a.p+"assets/img/nullptr.2c816875.jpg",i=a.p+"assets/img/cdosingleton.f56c4b40.png",k=a.p+"assets/img/gameinstanceprint.4156de95.png",u=(0,e.Fv)('<div class="language-cpp line-numbers-mode" data-ext="cpp" data-title="cpp"><pre class="language-cpp"><code><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;iostream&gt;</span></span>\n<span class="token keyword">class</span> <span class="token class-name">MyClass</span> <span class="token punctuation">{</span>  \n<span class="token punctuation">}</span>\n<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>\n    MyClass<span class="token operator">*</span> a <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">MyClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n    <span class="token comment">//Do Someting</span>\n    <span class="token keyword">delete</span> a<span class="token punctuation">;</span>\n<span class="token punctuation">}</span>\n</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>',1),r=(0,e.Fv)('<ol><li><strong>默认构造函数 (Default Constructor):</strong></li></ol><blockquote><p>如果没有为类定义任何构造函数,编译器将生成一个无参的默认构造函数。</p></blockquote><ol start="2"><li><strong>析构函数 (Destructor):</strong></li></ol><blockquote><p>如果没有显式定义析构函数,编译器将生成一个默认的析构函数。用于在对象生命周期结束时进行清理工作,如 <code>~MyClass()</code>。</p></blockquote><ol start="3"><li><strong>拷贝构造函数 (Copy Constructor):</strong></li></ol><blockquote><p>如果没有定义自己的拷贝构造函数,编译器将生成一个默认的拷贝构造函数。 通过复制另一个对象来初始化一个新对象,如 <code>MyClass obj1; MyClass obj2 = obj1;</code>。</p></blockquote><ol start="4"><li><strong>拷贝赋值运算符 (Copy Assignment Operator):</strong></li></ol><blockquote><p>如果没有定义自己的拷贝赋值运算符,编译器将生成一个默认的拷贝赋值运算符。 用于将一个对象的值复制给另一个对象,例如 <code>MyClass obj1, obj2; obj2 = obj1;</code>。</p></blockquote><div class="language-cpp line-numbers-mode" data-ext="cpp" data-title="cpp"><pre class="language-cpp"><code><span class="token keyword">class</span> <span class="token class-name">MyClass</span>\n<span class="token punctuation">{</span>\n<span class="token keyword">public</span><span class="token operator">:</span>\n    <span class="token function">MyClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>\n    <span class="token operator">~</span><span class="token function">MyClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>\n<span class="token punctuation">}</span><span class="token punctuation">;</span>\n</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>',9),d=(0,e.Fv)('<blockquote><p>类默认是私有的。</p></blockquote><div class="language-cpp line-numbers-mode" data-ext="cpp" data-title="cpp"><pre class="language-cpp"><code><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;iostream&gt;</span></span>\n\n<span class="token keyword">class</span> <span class="token class-name">MyClass</span>\n<span class="token punctuation">{</span>\n    <span class="token function">MyClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>\n<span class="token keyword">public</span><span class="token operator">:</span>\n    <span class="token operator">
1~</span><span class="token function">MyClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>\n<span class="token punctuation">}</span><span class="token punctuation">;</span>\n\n<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>\n    \n    MyClass<span class="token operator">*</span> a <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">MyClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>\n<span class="token punctuation">}</span>\n</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>',2),v=(0,e.Lk)("figure",null,[(0,e.Lk)("img",{src:t,alt:"",tabindex:"0",loading:"lazy"}),(0,e.Lk)("figcaption")],-1),m=(0,e.Fv)('<div class="language-cpp line-numbers-mode" data-ext="cpp" data-title="cpp"><pre class="language-cpp"><code><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;iostream&gt;</span></span>\n\n<span class="token keyword">class</span> <span class="token class-name">Singleton</span> \n<span class="token punctuation">{</span>\n\n    <span class="token comment">// 将构造函数私有化</span>\n    <span class="token function">Singleton</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>\n\n<span class="token keyword">public</span><span class="token operator">:</span>\n<span class="token comment">// 静态成员函数,用于获取类的唯一实例</span>\n<span class="token keyword">static</span> Singleton<span class="token operator">&amp;</span> <span class="token function">getInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span> \n<span class="token punctuation">{</span>\n<span class="token keyword">static</span> Singleton instance<span class="token punctuation">;</span>\n<span class="token keyword">return</span> instance <span class="token punctuation">;</span>\n<span class="token punctuation">}</span>\n<span class="token keyword">void</span> <span class="token function">testfunction</span><span class="token punctuation">(</span><span class="token punctuation">)</span> \n<span class="token punctuation">{</span>\nstd<span class="token double-colon punctuation">::</span>cout<span class="token operator">&lt;&lt;</span><span class="token string">&quot;testfunction&quot;</span><span class="token operator">&lt;&lt;</span>std<span class="token double-colon punctuation">::</span>endl<span class="token punctuation">;</span>\n<span class="token punctuation">}</span>\n<span class="token punctuation">}</span><span class="token punctuation">;</span>\n\n<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> \n<span class="token punctuation">{</span>\n    <span class="token comment">// 获取单例实例</span>\n    Singleton<span class="token operator">&amp;</span> singletonInstance <span class="token operator">=</span> <span class="token class-name">Singleton</span><span class="token double-colon punctuation">::</span><span class="token function">getInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n    singletonInstance<span class="token punctuation">.</span><span class="token function">testfunction</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>\n<span class="token punctuation">}</span>\n</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>',1),L=(0,e.Fv)('<div class="language-cpp line-numbers-mode" data-ext="cpp" data-title="cpp"><pre class="language-cpp"><code><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;iostream&gt;</span></span>\n\n<span class="token keyword">class</span> <span class="token class-name">Singleton</span> \n<span class="token punctuation">{</span>\n    <span class="token comment">// 将构造函数私有化</span>\n    <span class="token function">Singleton</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>\n\n<span class="token keyword">public</span><span class="token operator">:</span>\n    <span class="token keyword">static</span> Singleton<span class="token operator">*</span> <span class="token function">getInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
1\n        <span class="token keyword">static</span> Singleton instance<span class="token punctuation">;</span>\n        <span class="token keyword">return</span> <span class="token operator">&amp;</span>instance<span class="token punctuation">;</span>\n    <span class="token punctuation">}</span>\n    <span class="token keyword">void</span> <span class="token function">testfunction</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>\n        std<span class="token double-colon punctuation">::</span>cout<span class="token operator">&lt;&lt;</span><span class="token string">&quot;testfunction&quot;</span><span class="token operator">&lt;&lt;</span>std<span class="token double-colon punctuation">::</span>endl<span class="token punctuation">;</span>\n    <span class="token punctuation">}</span>\n<span class="token punctuation">}</span><span class="token punctuation">;</span>\n\n<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>   \n    <span class="token comment">// 获取单例实例</span>\n    Singleton<span class="token operator">*</span> singletonInstance <span class="token operator">=</span> <span class="token class-name">Singleton</span><span class="token double-colon punctuation">::</span><span class="token function">getInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n    singletonInstance<span class="token operator">-&gt;</span><span class="token function">testfunction</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>\n<span class="token punctuation">}</span>\n</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><blockquote><p>也可以改写成动态内存分配创建单例对象(懒汉式),这也是智能指针管理内存的核心思想之一,用户无需关心指针释放时机。</p></blockquote><div class="language-cpp line-numbers-mode" data-ext="cpp" data-title="cpp"><pre class="language-cpp"><code><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;iostream&gt;</span></span>\n\n<span class="token keyword">class</span> <span class="token class-name">Singleton</span> \n<span class="token punctuation">{</span>\n    <span class="token comment">// 将构造函数私有化</span>\n    <span class="token function">Singleton</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>\n\n<span class="token keyword">public</span><span class="token operator">:</span>\n    <span class="token keyword">static</span> Singleton<span class="token operator">*</span> <span class="token function">getInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>\n        <span class="token keyword">static</span> Singleton<span class="token operator">*</span> instance <span class="token operator">=</span> <span class="token keyword">nullptr</span><span class="token punctuation">;</span>
1\n        <span class="token keyword">if</span> <span class="token punctuation">(</span>instance <span class="token operator">==</span> <span class="token keyword">nullptr</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>\n            instance <span class="token operator">=</span> <span class="token keyword">new</span> Singleton<span class="token punctuation">;</span>\n        <span class="token punctuation">}</span>\n        <span class="token keyword">return</span> instance<span class="token punctuation">;</span>\n    <span class="token punctuation">}</span>\n\n    <span class="token keyword">void</span> <span class="token function">testfunction</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>\n        std<span class="token double-colon punctuation">::</span>cout <span class="token operator">&lt;&lt;</span> <span class="token string">&quot;testfunction&quot;</span> <span class="token operator">&lt;&lt;</span> std<span class="token double-colon punctuation">::</span>endl<span class="token punctuation">;</span>\n    <span class="token punctuation">}</span>\n\n    <span class="token operator">~</span><span class="token function">Singleton</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>\n        <span class="token comment">// 在析构函数中释放动态分配的内存</span>\n        <span class="token keyword">if</span> <span class="token punctuation">(</span>instance <span class="token operator">!=</span> <span class="token keyword">nullptr</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>\n            <span class="token keyword">delete</span> instance<span class="token punctuation">;</span>\n            instance <span class="token operator">=</span> <span class="token keyword">nullptr</span><span class="token punctuation">;</span>\n        <span class="token punctuation">}</span>\n    <span class="token punctuation">}</span>\n<span class="token punctuation">}</span><span class="token punctuation">;</span>\n\n<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>   \n    <span class="token comment">// 获取单例实例</span>\n    Singleton<span class="token operator">*</span> singletonInstance <span class="token operator">=</span> <span class="token class-name">Singleton</span><span class="token double-colon punctuation">::</span><span class="token function">getInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n    singletonInstance<span class="token operator">-&gt;</span><span class="token function">testfunction</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n    <span class="token comment">// 在程序结束时,析构函数会被调用,释放动态分配的内存</span>\n\n    <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>\n<span class="token punctuation">}</span>\n</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="hint-container note"><p class="hint-container-title">注</p><p>考虑UE大多数情况下无需多线程使用单例,因此没有考虑线程安全问题。懒汉式天生线程安全,但饿汉式多线程会存在线程安全问题,必要时考虑使用互斥锁、双重检查。</p></div>',4),b=(0,e.Lk)("figure",null,[(0,e.Lk)("img",{src:o,alt:"",tabindex:"0",loading:"lazy"}),(0,e.Lk)("figcaption")],-1),g=(0,e.Lk)("blockquote",null,[(0,e.Lk)("p",null,"在UE中宁可推荐使用结构体单例也不推荐直接用原生单例")],-1),W=(0,e.Lk)("h3",{id:"经典模式",tabindex:"-1"},[(0,e.Lk)("a",{class:"header-anchor",href:"#经典模式"},[(0,e.Lk)("span",null,"经典模式")])],-1),y=(0,e.Lk)("div",{class:"language-cpp line-numbers-mode","data-ext":"cpp","data-title":"cpp"},[(0,e.Lk)("pre",{class:"language-cpp"},[(0,e.Lk)("code",null,[(0,e.Lk)("span",{class:"token macro property"},[(0,e.Lk)("span",{class:"token directive-hash"},"#"),(0,e.Lk)("span",{class:"token directive keyword"},"pragma"),(0,e.eW)(),(0,e.Lk)("span",{class:"token expression"},"once")]),(0,e.eW)("\n\n"),(0,e.Lk)("span",{class:"token macro property"},[(0,e.Lk)("span",{class:"token directive-hash"},"#"),(0,e.Lk)("span",{class:"token directive keyword"},"include"),(0,e.eW)(),(0,e.Lk)("span",{class:"token string"},'"CoreMinimal.h"')]),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token macro property"},[(0,e.Lk)("span",{class:"token directive-hash"},"#"),(0,e.Lk)("span",{class:"token directive keyword"},"include"),(0,e.eW)(),(0,e.Lk)("span",{class:"token string"},'"UObject/ObjectMacros.h"')]),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token macro property"},[(0,e.Lk)("span",{class:"token directive-hash"},"#"),(0,e.Lk)("span",{class:"token directive keyword"},"include"),(0,e.eW)(),(0,e.Lk)("span",{class:"token string"},'"GameSingleton.generated.h"')]),(0,e.eW)("\n\n"),(0,e.Lk)("span",{class:"token function"},"UCLASS"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.eW)("Blueprintable"),(0,e.Lk)("span",{class:"token punctuation"},","),(0,e.eW)("BlueprintType"),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token keyword"},"class"),(0,e.eW)(),(0,e.Lk)("span",{class:"token class-name"},"EXORCIST_API"),(0,e.eW)(" UGameSingleton "),(0,e.Lk)("span",{class:"token operator"},":"),(0,e.eW)(),(0,e.Lk)("span",{class:"token keyword"},"public"),(0,e.eW)(" UObject\n"),(0,e.Lk)("span",{class:"token punctuation"},"{"),(0,e.eW)("\n\t"),(0,e.Lk)("span",{class:"token function"},"GENERATED_BODY"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n\t\n"),(0,e.Lk)("span",{class:"token keyword"}
1,"private"),(0,e.Lk)("span",{class:"token operator"},":"),(0,e.eW)("\n\t "),(0,e.Lk)("span",{class:"token function"},"UGameSingleton"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)(),(0,e.Lk)("span",{class:"token punctuation"},"{"),(0,e.Lk)("span",{class:"token punctuation"},"}"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token keyword"},"public"),(0,e.Lk)("span",{class:"token operator"},":"),(0,e.eW)("\n\t"),(0,e.Lk)("span",{class:"token function"},"UFUNCTION"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.eW)("BlueprintCallable"),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n\t"),(0,e.Lk)("span",{class:"token keyword"},"static"),(0,e.eW)(" UGameSingleton"),(0,e.Lk)("span",{class:"token operator"},"*"),(0,e.eW)(),(0,e.Lk)("span",{class:"token function"},"GetInstance"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token keyword"},"public"),(0,e.Lk)("span",{class:"token operator"},":"),(0,e.eW)("\n\t"),(0,e.Lk)("span",{class:"token function"},"UPROPERTY"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.eW)("BlueprintReadWrite"),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n\tint32 InstanceCount "),(0,e.Lk)("span",{class:"token operator"},"="),(0,e.eW)(),(0,e.Lk)("span",{class:"token number"},"30"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token punctuation"},"}"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n")])]),(0,e.Lk)("div",{class:"line-numbers","aria-hidden":"true"},[(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"})])],-1),f=(0,e.Lk)("div",{class:"language-cpp line-numbers-mode","data-ext":"cpp","data-title":"cpp"},[(0,e.Lk)("pre",{class:"language-cpp"},[(0,e.Lk)("code",null,[(0,e.Lk)("span",{class:"token macro property"},[(0,e.Lk)("span",{class:"token directive-hash"},"#"),(0,e.Lk)("span",{class:"token directive keyword"},"include"),(0,e.eW)(),(0,e.Lk)("span",{class:"token string"},'"GameSingleton.h"')]),(0,e.eW)("\n\nUGameSingleton"),(0,e.Lk)("span",{class:"token operator"},"*"),(0,e.eW)(),(0,e.Lk)("span",{class:"token class-name"},"UGameSingleton"),(0,e.Lk)("span",{class:"token double-colon punctuation"},"::"),(0,e.Lk)("span",{class:"token function"},"GetInstance"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token punctuation"},"{"),(0,e.eW)("\n\t"),(0,e.Lk)("span",{class:"token keyword"},"static"),(0,e.eW)(" UGameSingleton"),(0,e.Lk)("span",{class:"token operator"},"*"),(0,e.eW)(" instance"),(0,e.Lk)("span",{class:"token operator"},"="),(0,e.Lk)("span",{class:"token keyword"},"nullptr"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n\t"),(0,e.Lk)("span",{class:"token keyword"},"if"),(0,e.eW)(),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.eW)("instance"),(0,e.Lk)("span",{class:"token operator"},"=="),(0,e.Lk)("span",{class:"token keyword"},"nullptr"),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n\t"),(0,e.Lk)("span",{class:"token punctuation"},"{"),(0,e.eW)("\n\t\tinstance"),(0,e.Lk)("span",{class:"token operator"},"="),(0,e.Lk)("span",{class:"token generic-function"},[(0,e.Lk)("span",{class:"token function"},"NewObject"),(0,e.Lk)("span",{class:"token generic class-name"},[(0,e.Lk)("span",{class:"token operator"},"<"),(0,e.eW)("UGameSingleton"),(0,e.Lk)("span",{class:"token operator"},">")])]),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n\t\tinstance"),(0,e.Lk)("span",{class:"token operator"},"->"),(0,e.Lk)("span",{class:"token function"},"AddToRoot"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n\t"),(0,e.Lk)("span",{class:"token punctuation"},"}"),(0,e.eW)("\n\t"),(0,e.Lk)("span",{class:"token keyword"},"return"),(0,e.eW)(" instance"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token punctuation"},"}"),(0,e.eW)("\n")])]),(0,e.Lk)("div",{class:"line-numbers","aria-hidden":"true"},[(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"})])],-1),h=(0,e.Lk)("figure",null,[(0,e.Lk)("img",{src:l,alt:"",tabindex:"0",loading:"lazy"}),(0,e.Lk)("figcaption")],-1),w=(0,e.Lk)("h3",{id:"enginesingleton",tabindex:"-1"},[(0,e.Lk)("a",{class:"header-anchor",href:"#enginesingleton"},[(0,e.Lk)("span",null,"EngineSingleton")])],-1),S=(0,e.Lk)("div",{class:"language-cpp line-numbers-mode","data-ext":"cpp","data-title":"cpp"},[(0,e.Lk)("pre",{class:"language-cpp"},[(0,e.Lk)("code",null,[(0,e.Lk)("span",{class:"token macro property"},[(0,e.Lk)("span",{class:"token directive-hash"},"#"),(0,e.Lk)("span",{class:"token directive keyword"},"pragma"),(0,e.eW)(),(0,e.Lk)("span",{class:"token expression"},"once")]),(0,e.eW)("\n\n"),(0,e.Lk)("span",{class:"token macro property"},[(0,e.Lk)("span",{class:"token directive-hash"},"#"),(0,e.Lk)("span",{class:"token directive keyword"},"include"),(0,e.eW)(),(0,e.Lk)("span",{class:"token string"},'"CoreMinimal.h"')]),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token macro property"},[(0,e.Lk)("span",{class:"token directive-hash"},"#"),(0,e.Lk)("span",{class:"token directive keyword"},"include"),(0,e.eW)(),(0,e.Lk)("span",{class:"token string"},'"UObject/ObjectMacros.h"')]),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token macro property"},[(0,e.Lk)("span",{class:"token directive-hash"},"#"),(0,e.Lk)("span",{class:"token directive keyword"},"include"),(0,e.eW)(),(0,e.Lk)("span",{class:"token string"},'"GameSingleton.generated.h"')]),(0,e.eW)("\n\n"),(0,e.Lk)("span",{class:"token function"},"UCLASS"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.eW)("Blueprintable"),(0,e.Lk)("span",{class:"token punctuation"},","),(0,e.eW)("BlueprintType"),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token keyword"},"class"),(0,e.eW)(),(0,e.Lk)("span",{class:"token class-name"},"EXORCIST_API"),(0,e.eW)(" UGameSingleton "),(0,e.Lk)("span",{class:"token operator"},":"),(0,e.eW)(),(0,e.Lk)("span",{class:"token keyword"},"public"),(0,e.eW)(" UObject\n"),(0,e.Lk)("span",{class:"token punctuation"},"{"),(0,e.eW)("\n\t"),(0,e.Lk)("span",{class:"token function"},"GENERATED_BODY"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n\t\n"),(0,e.Lk)("span",{class:"token keyword"}
1,"private"),(0,e.Lk)("span",{class:"token operator"},":"),(0,e.eW)("\n\t "),(0,e.Lk)("span",{class:"token function"},"UGameSingleton"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)(),(0,e.Lk)("span",{class:"token punctuation"},"{"),(0,e.Lk)("span",{class:"token punctuation"},"}"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token keyword"},"public"),(0,e.Lk)("span",{class:"token operator"},":"),(0,e.eW)("\n\t"),(0,e.Lk)("span",{class:"token function"},"UFUNCTION"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.eW)("BlueprintCallable"),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n\t"),(0,e.Lk)("span",{class:"token keyword"},"static"),(0,e.eW)(" UGameSingleton"),(0,e.Lk)("span",{class:"token operator"},"*"),(0,e.eW)(),(0,e.Lk)("span",{class:"token function"},"GetInstance"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token keyword"},"public"),(0,e.Lk)("span",{class:"token operator"},":"),(0,e.eW)("\n\t"),(0,e.Lk)("span",{class:"token function"},"UPROPERTY"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.eW)("BlueprintReadWrite"),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n\tint32 InstanceCount "),(0,e.Lk)("span",{class:"token operator"},"="),(0,e.eW)(),(0,e.Lk)("span",{class:"token number"},"30"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token punctuation"},"}"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n\n\n")])]),(0,e.Lk)("div",{class:"line-numbers","aria-hidden":"true"},[(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"})])],-1),C=(0,e.Lk)("div",{class:"language-cpp line-numbers-mode","data-ext":"cpp","data-title":"cpp"},[(0,e.Lk)("pre",{class:"language-cpp"},[(0,e.Lk)("code",null,[(0,e.Lk)("span",{class:"token macro property"},[(0,e.Lk)("span",{class:"token directive-hash"},"#"),(0,e.Lk)("span",{class:"token directive keyword"},"include"),(0,e.eW)(),(0,e.Lk)("span",{class:"token string"},'"GameSingleton.h"')]),(0,e.eW)("\n\nUGameSingleton"),(0,e.Lk)("span",{class:"token operator"},"*"),(0,e.eW)(),(0,e.Lk)("span",{class:"token class-name"},"UGameSingleton"),(0,e.Lk)("span",{class:"token double-colon punctuation"},"::"),(0,e.Lk)("span",{class:"token function"},"GetInstance"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token punctuation"},"{"),(0,e.eW)("\n\t"),(0,e.Lk)("span",{class:"token keyword"},"if"),(0,e.eW)(),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.eW)("GEngine"),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n\t"),(0,e.Lk)("span",{class:"token punctuation"},"{"),(0,e.eW)("\n\t\tUGameSingleton"),(0,e.Lk)("span",{class:"token operator"},"*"),(0,e.eW)(" Instance "),(0,e.Lk)("span",{class:"token operator"},"="),(0,e.eW)(),(0,e.Lk)("span",{class:"token generic-function"},[(0,e.Lk)("span",{class:"token function"},"Cast"),(0,e.Lk)("span",{class:"token generic class-name"},[(0,e.Lk)("span",{class:"token operator"},"<"),(0,e.eW)("UGameSingleton"),(0,e.Lk)("span",{class:"token operator"},">")])]),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.eW)("GEngine"),(0,e.Lk)("span",{class:"token operator"},"->"),(0,e.eW)("GameSingleton"),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n\t\t"),(0,e.Lk)("span",{class:"token keyword"},"if"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.eW)("Instance"),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n\t\t"),(0,e.Lk)("span",{class:"token punctuation"},"{"),(0,e.eW)("\n\t\t    "),(0,e.Lk)("span",{class:"token keyword"},"return"),(0,e.eW)(" Instance"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n\t\t"),(0,e.Lk)("span",{class:"token punctuation"},"}"),(0,e.eW)("\n\n\t"),(0,e.Lk)("span",{class:"token punctuation"},"}"),(0,e.eW)("\n\t"),(0,e.Lk)("span",{class:"token keyword"},"return"),(0,e.eW)(),(0,e.Lk)("span",{class:"token keyword"},"nullptr"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token punctuation"},"}"),(0,e.eW)("\n")])]),(0,e.Lk)("div",{class:"line-numbers","aria-hidden":"true"},[(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"})])],-1),F=(0,e.Lk)("figure",null,[(0,e.Lk)("img",{src:c,alt:"",tabindex:"0",loading:"lazy"}),(0,e.Lk)("figcaption")],-1),j=(0,e.Fv)('<div class="language-cpp line-numbers-mode" data-ext="cpp" data-title="cpp"><pre class="language-cpp"><code>UGameSingleton<span class="token operator">*</span> Instance <span class="token operator">=</span> <span class="token generic-function"><span class="token function">Cast</span><span class="token generic class-name"><span class="token operator">&lt;</span>UGameSingleton<span class="token operator">&gt;</span></span></span><span class="token punctuation">(</span>GEngine<span class="token operator">-&gt;</span>GameSingleton<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//没有设置拿不到对应对象实例指针。</span>\n</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><figure><img src="'+p+'" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure><h3 id="cdosingleton" tabindex="-1"><a class="header-anchor" href="#cdosingleton"><span>CDOSingleton</span></a></h3>',3),G=(0,e.Lk)("figure",null,[(0,e.Lk)("img",{src:i,alt:"",tabindex:"0",loading:"lazy"}),(0,e.Lk)("figcaption")],-1),U=(0,e.Lk)("div",{class:"language-cpp line-numbers-mode","data-ext":"cpp","data-title":"cpp"},[(0,e.Lk)("pre",{class:"language-cpp"},[(0,e.Lk)("code",null,[(0,e.Lk)("span",{class:"token macro property"},[(0,e.Lk)("span",{class:"token directive-hash"},"#"),(0,e.Lk)("span",{class:"token directive keyword"},"pragma"),(0,e.eW)(),(0,e.Lk)("span",{class:"token expression"},"once")]),(0,e.eW)("\n\n"),(0,e.Lk)("span",{class:"token macro property"},[(0,e.Lk)("span",{class:"token directive-hash"},"#"),(0,e.Lk)("span",{class:"token directive keyword"},"include"),(0,e.eW)(),(0,e.Lk)("span",{class:"token string"},'"CoreMinimal.h"')]),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token macro property"},[(0,e.Lk)("span",{class:"token directive-hash"},"#"),(0,e.Lk)("span",{class:"token directive keyword"},"include"),(0,e.eW)(),(0,e.Lk)("span",{class:"token string"},'"UObject/NoExportTypes.h"')]),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token macro property"},[(0,e.Lk)("span",{class:"token directive-hash"},"#"),(0,e.Lk)("span",{class:"token directive keyword"},"include"),(0,e.eW)(),(0,e.Lk)("span",{class:"token string"},'"MySingleton.generated.h"')]),(0,e.eW)("\n\n"),(0,e.Lk)("span",{class:"token function"},"UCLASS"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.eW)("BlueprintType"),(0,e.Lk)("span",{class:"token punctuation"},","),(0,e.eW)("Blueprintable"),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token keyword"},"class"),(0,e.eW)(),(0,e.Lk)("span",{class:"token class-name"},"UMySingleton"),(0,e.eW)(),(0,e.Lk)("span",{class:"token operator"},":"),(0,e.eW)(),(0,e.Lk)("span",{class:"token base-clause"},[(0,e.Lk)("span",{class:"token keyword"},"public"),(0,e.eW)(),(0,e.Lk)("span",{class:"token class-name"},"UObject")]),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token punctuation"},"{"),(0,e.eW)("\n\t"),(0,e.Lk)("span",{class:"token function"},"GENERATED_BODY"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token keyword"},"public"),(0,e.Lk)("span",{class:"token operator"},":"),(0,e.eW)("\n   "),(0,e.Lk)("span",{class:"token function"},"UMySingleton"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.Lk)("span",{class:"token keyword"},"const"),(0,e.eW)(" FObjectInitializer"),(0,e.Lk)("span",{class:"token operator"}
1,"&"),(0,e.eW)(" ObjectInitializer"),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n   \n   "),(0,e.Lk)("span",{class:"token function"},"UFUNCTION"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.eW)("BlueprintPure"),(0,e.Lk)("span",{class:"token punctuation"},","),(0,e.eW)(" Category"),(0,e.Lk)("span",{class:"token operator"},"="),(0,e.eW)("MySingleton"),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n   "),(0,e.Lk)("span",{class:"token keyword"},"static"),(0,e.eW)(" UMySingleton"),(0,e.Lk)("span",{class:"token operator"},"*"),(0,e.eW)(),(0,e.Lk)("span",{class:"token function"},"GetInstance"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n   \n   "),(0,e.Lk)("span",{class:"token function"},"UFUNCTION"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.eW)("BlueprintCallable"),(0,e.Lk)("span",{class:"token punctuation"},","),(0,e.eW)(" Category"),(0,e.Lk)("span",{class:"token operator"},"="),(0,e.eW)("MySingleton"),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n   "),(0,e.Lk)("span",{class:"token keyword"},"void"),(0,e.eW)(),(0,e.Lk)("span",{class:"token function"},"SetTestStr"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.eW)("FString InStr"),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n   \n   "),(0,e.Lk)("span",{class:"token function"},"UFUNCTION"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.eW)("BlueprintCallable"),(0,e.Lk)("span",{class:"token punctuation"},","),(0,e.eW)(" Category"),(0,e.Lk)("span",{class:"token operator"},"="),(0,e.eW)("MySingleton"),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n   FString "),(0,e.Lk)("span",{class:"token function"},"GetTestStr"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token keyword"}
1,"private"),(0,e.Lk)("span",{class:"token operator"},":"),(0,e.eW)("\n    FString TestStr"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token punctuation"},"}"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n")])]),(0,e.Lk)("div",{class:"line-numbers","aria-hidden":"true"},[(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"})])],-1),_=(0,e.Lk)("div",{class:"language-cpp line-numbers-mode","data-ext":"cpp","data-title":"cpp"},[(0,e.Lk)("pre",{class:"language-cpp"},[(0,e.Lk)("code",null,[(0,e.Lk)("span",{class:"token macro property"},[(0,e.Lk)("span",{class:"token directive-hash"},"#"),(0,e.Lk)("span",{class:"token directive keyword"},"include"),(0,e.eW)(),(0,e.Lk)("span",{class:"token string"},'"Singleton.h"')]),(0,e.eW)("\n\n"),(0,e.Lk)("span",{class:"token class-name"},"UMySingleton"),(0,e.Lk)("span",{class:"token double-colon punctuation"},"::"),(0,e.Lk)("span",{class:"token function"},"UMySingleton"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.Lk)("span",{class:"token keyword"},"const"),(0,e.eW)(" FObjectInitializer"),(0,e.Lk)("span",{class:"token operator"},"&"),(0,e.eW)(" ObjectInitializer"),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n\t"),(0,e.Lk)("span",{class:"token operator"},":"),(0,e.Lk)("span",{class:"token function"},"Super"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.eW)("ObjectInitializer"),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token punctuation"},"{"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token punctuation"},"}"),(0,e.eW)("\n\nUMySingleton"),(0,e.Lk)("span",{class:"token operator"},"*"),(0,e.eW)(),(0,e.Lk)("span",{class:"token class-name"},"UMySingleton"),(0,e.Lk)("span",{class:"token double-colon punctuation"},"::"),(0,e.Lk)("span",{class:"token function"},"GetInstance"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token punctuation"},"{"),(0,e.eW)("\n    "),(0,e.Lk)("span",{class:"token comment"},"// 大多数情况下CDO不应该被修改(使用GetDefault),这里使用GetMutableDefault返回的是可修改版本。"),(0,e.eW)("\n   "),(0,e.Lk)("span",{class:"token keyword"},"return"),(0,e.eW)(),(0,e.Lk)("span",{class:"token generic-function"},[(0,e.Lk)("span",{class:"token function"},"GetMutableDefault"),(0,e.Lk)("span",{class:"token generic class-name"},[(0,e.Lk)("span",{class:"token operator"},"<"),(0,e.eW)("UMySingleton"),(0,e.Lk)("span",{class:"token operator"},">")])]),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token punctuation"},"}"),(0,e.eW)("\n\n"),(0,e.Lk)("span",{class:"token keyword"},"void"),(0,e.eW)(),(0,e.Lk)("span",{class:"token class-name"},"UMySingleton"),(0,e.Lk)("span",{class:"token double-colon punctuation"},"::"),(0,e.Lk)("span",{class:"token function"},"SetTestStr"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.eW)("FString InStr"),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token punctuation"},"{"),(0,e.eW)("\n    TestStr "),(0,e.Lk)("span",{class:"token operator"},"="),(0,e.eW)(" InStr"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token punctuation"},"}
1"),(0,e.eW)("\n\nFString "),(0,e.Lk)("span",{class:"token class-name"},"UMySingleton"),(0,e.Lk)("span",{class:"token double-colon punctuation"},"::"),(0,e.Lk)("span",{class:"token function"},"GetTestStr"),(0,e.Lk)("span",{class:"token punctuation"},"("),(0,e.Lk)("span",{class:"token punctuation"},")"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token punctuation"},"{"),(0,e.eW)("\n    "),(0,e.Lk)("span",{class:"token keyword"},"return"),(0,e.eW)(" TestStr"),(0,e.Lk)("span",{class:"token punctuation"},";"),(0,e.eW)("\n"),(0,e.Lk)("span",{class:"token punctuation"},"}"),(0,e.eW)("\n")])]),(0,e.Lk)("div",{class:"line-numbers","aria-hidden":"true"},[(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"}),(0,e.Lk)("div",{class:"line-number"})])],-1),M=(0,e.Lk)("h3",{id:"gameinstance",tabindex:"-1"},[(0,e.Lk)("a",{class:"header-anchor",href:"#gameinstance"},[(0,e.Lk)("span",null,"GameInstance")])],-1),I=(0,e.Lk)("figure",null,[(0,e.Lk)("img",{src:k,alt:"",tabindex:"0",loading:"lazy"}),(0,e.Lk)("figcaption")],-1),E=(0,e.Lk)("h3",{id:"subsystem-子系统",tabindex:"-1"},[(0,e.Lk)("a",{class:"header-anchor",href:"#subsystem-子系统"},[(0,e.Lk)("span",null,"Subsystem|子系统")])],-1),x=(0,e.Fv)('<div class="language-cpp line-numbers-mode" data-ext="cpp" data-title="cpp"><pre class="language-cpp"><code><span class="token keyword">bool</span> <span class="token class-name">UGameUIManagerSubsystem</span><span class="token double-colon punctuation">::</span><span class="token function">ShouldCreateSubsystem</span><span class="token punctuation">(</span>UObject<span class="token operator">*</span> Outer<span class="token punctuation">)</span> <span class="token keyword">const</span>\n<span class="token punctuation">{</span>\n\t<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token generic-function"><span class="token function">CastChecked</span><span class="token generic class-name"><span class="token operator">&lt;</span>UGameInstance<span class="token operator">&gt;</span></span></span><span class="token punctuation">(</span>Outer<span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">IsDedicatedServerInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>\n\t<span class="token punctuation">{</span>\n\t\tTArray<span class="token operator">&lt;</span>UClass<span class="token operator">*</span><span class="token operator">&gt;</span> ChildClasses<span class="token punctuation">;</span>\n\t\t<span class="token function">GetDerivedClasses</span><span class="token punctuation">(</span><span class="token function">GetClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> ChildClasses<span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">;</span>\n\n\t\t<span class="token comment">// Only create an instance if there is no override implementation defined elsewhere</span>\n\t\t<span class="token keyword">return</span> ChildClasses<span class="token punctuation">.</span><span class="token function">Num</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">;</span>\n\t<span class="token punctuation">}</span>\n\n\t<span class="token keyword">return</span> <span class="token boolean">
1false</span><span class="token punctuation">;</span>\n<span class="token punctuation">}</span>\n</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="问题" tabindex="-1"><a class="header-anchor" href="#问题"><span>问题</span></a></h3>',2),O=(0,e.Lk)("h3",{id:"扩展",tabindex:"-1"},[(0,e.Lk)("a",{class:"header-anchor",href:"#扩展"},[(0,e.Lk)("span",null,"扩展")])],-1),A={href:"https://forums.unrealengine.com/t/singleton-pattern-in-c/430452",target:"_blank",rel:"noopener noreferrer"},T={href:"https://www.bilibili.com/video/BV1bR4y177Hp/?spm_id_from=333.999.0.0",target:"_blank",rel:"noopener noreferrer"},D={},q=(0,a(66262).A)(D,[["render",function(n,s){const a=(0,e.g2)("chatmessage"),t=(0,e.g2)("RouteLink"),o=(0,e.g2)("CodeTabs"),l=(0,e.g2)("gifwithbutton"),c=(0,e.g2)("ExternalLinkIcon");return(0,e.uX)(),(0,e.CE)("div",null,[(0,e.bF)(a,{avatar:"../../assets/emoji/hh.png",avatarWidth:40},{default:(0,e.k6)((()=>[(0,e.eW)(" 什么是单例? ")])),_:1}),(0,e.bF)(a,{avatar:"../../assets/emoji/bqb (1).png",avatarWidth:40,alignLeft:""},{default:(0,e.k6)((()=>[(0,e.eW)(" 不同的框架实现方法不同,在C++中单例一般是指确保一个类只有一个实例,并为其提供一个全局访问入口。 ")])),_:1}),(0,e.bF)(a,{avatar:"../../assets/emoji/blzt.png",avatarWidth:40,alignLeft:""},{default:(0,e.k6)((()=>[(0,e.eW)(" 你先回答我,定义一个类后你是通过什么办法来新建实例的? ")])),_:1}),(0,e.bF)(a,{avatar:"../../assets/emoji/hx.png",avatarWidth:40},{default:(0,e.k6)((()=>[(0,e.eW)(" 用new关键字,堆上开辟一块空间给该对象实例。 ")])),_:1}),u,(0,e.bF)(a,{avatar:"../../assets/emoji/bqb (5).png",avatarWidth:40},{default:(0,e.k6)((()=>[(0,e.eW)(" 可是,该怎么限制用户的new操作呢?我总不能和用户说你不能new一个新实例吧! ")])),_:1}),(0,e.bF)(a,{avatar:"../../assets/emoji/blzt.png",avatarWidth:40,alignLeft:""},{default:(0,e.k6)((()=>[(0,e.eW)(" 你可以先康康一个普通类初始化后默认会有哪些操作? ")])),_:1}),(0,e.bF)(a,{avatar:"../../assets/emoji/ybk.png",avatarWidth:40},{default:(0,e.k6)((()=>[(0,e.eW)(" 这还不简单,类的四个初始化操作。 ")])),_:1}),r,(0,e.bF)(a,{avatar:"../../assets/emoji/new2.png",avatarWidth:50,alignLeft:""},{default:(0,e.k6)((()=>[(0,e.eW)(" 我们都知道构造函数默认写在public中,如果我强制将他移动到private会发生什么? ")])),_:1}),d,(0,e.bF)(a,{avatar:"../../assets/emoji/hx.png",avatarWidth:40},{default:(0,e.k6)((()=>[(0,e.eW)(" 还能发生什么,编译器报错呗。 ")])),_:1}),v,(0,e.bF)(a,{avatar:"../../assets/emoji/bqb (2).png",avatarWidth:40,alignLeft:""},{default:(0,e.k6)((()=>[(0,e.eW)(" 但换个角度思考,我们已经成功限制了用户的new行为,问题也变成了怎么生成第一个实例! 现在你思考一下什么情况下不需要新建实例就能访问某个对象成员? ")])),_:1}),(0,e.bF)(a,{avatar:"../../assets/emoji/new3.png",avatarWidth:55},{default:(0,e.k6)((()=>[(0,e.eW)(" 我记得static关键字修饰的成员函数!不需要实例化对象。 ")])),_:1}),(0,e.bF)(a,{avatar:"../../assets/emoji/new2.png",avatarWidth:55,alignLeft:""},{default:(0,e.k6)((()=>[(0,e.eW)(" 是的,现在new这条路已经不能走了,咱可以用static将他的提到静态区。 ")])),_:1}),m,(0,e.bF)(a,{avatar:"../../assets/emoji/new3.png",avatarWidth:55},{default:(0,e.k6)((()=>[(0,e.eW)(" 妙啊!也就是说利用static函数和他沟通,让他自己创造自己! ")])),_:1}),(0,e.bF)(a,{avatar:"../../assets/emoji/bqb (2).png",avatarWidth:40,alignLeft:""},{default:(0,e.k6)((()=>[(0,e.eW)(" 孺子可教!改成指针传递也是可以的 ")])),_:1}),L,(0,e.bF)(a,{avatar:"../../assets/emoji/blzt.png",avatarWidth:40,alignLeft:""},{default:(0,e.k6)((()=>[(0,e.Lk)("p",null,[(0,e.bF)(t,{to:"/language/cpp/designer_%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F_/1-Sington.html"},{default:(0,e.k6)((()=>[(0,e.eW)("Language/c++Designer/Singleton|单例")])),_:1})])])),_:1}),(0,e.bF)(a,{avatar:"../../assets/emoji/hh.png",avatarWidth:40},{default:(0,e.k6)((()=>[(0,e.eW)(" 那么!UE中支持原生C++单例实现吗? ")])),_:1}),(0,e.bF)(a,{avatar:"../../assets/emoji/blzt.png",avatarWidth:40,alignLeft:""},{default:(0,e.k6)((()=>[(0,e.eW)(" 支持!但官方不推荐使用!官方推荐我们使用subsystem ")])),_:1}),b,g,W,(0,e.bF)(o,{id:"104",data:[{id:"GameSingleton.h"},{id:"GameSingleton.cpp"}],"tab-id":"language"},{title0:(0,e.k6)((({value:n,isActive:s})=>[(0,e.eW)("GameSingleton.h")])),title1:(0,e.k6)((({value:n,isActive:s})=>[(0,e.eW)("GameSingleton.cpp")])),tab0:(0,e.k6)((({value:n,isActive:s})=>[y])),tab1:(0,e.k6)((({value:n,isActive:s})=>[f])),_:1},8,["data"]),(0,e.bF)(a,{avatar:"../../assets/emoji/blzt.png",avatarWidth:40,alignLeft:""},{default:(0,e.k6)((()=>[(0,e.eW)(" 蓝图中通过实例指针修改成员变量,然后跳转关卡或者重新打开打印一下康康不就知道了!` ")])),_:1}),h,(0,e.bF)(l,{src:"../../assets/unrealgif/ramdonsington.gif"}),(0,e.bF)(a,{avatar:"../../assets/emoji/hh.png",avatarWidth:40},{default:(0,e.k6)((()=>[(0,e.eW)(" 我发现他重写打开关卡后他设置的值依然是上一次!只有在引擎彻底重启后数值才恢复成30。 ")])),_:1}),(0,e.bF)(l,{src:"../../assets/unrealgif/sington.gif"}),(0,e.bF)(a,{avatar:"../../assets/emoji/blzt.png",avatarWidth:40,alignLeft:""},{default:(0,e.k6)((()=>[(0,e.eW)(" 没错,他的生命周期和引擎是一样的,意味着在编辑器模式中的GEngine没有销毁这个变量就一直å­
1˜åœ¨ã€‚因此你可以看到另外一种写法: ")])),_:1}),w,(0,e.bF)(o,{id:"125",data:[{id:"GameSingleton.h"},{id:"GameSingleton.cpp"}],"tab-id":"language"},{title0:(0,e.k6)((({value:n,isActive:s})=>[(0,e.eW)("GameSingleton.h")])),title1:(0,e.k6)((({value:n,isActive:s})=>[(0,e.eW)("GameSingleton.cpp")])),tab0:(0,e.k6)((({value:n,isActive:s})=>[S])),tab1:(0,e.k6)((({value:n,isActive:s})=>[C])),_:1},8,["data"]),(0,e.bF)(a,{avatar:"../../assets/emoji/blzt.png",avatarWidth:40,alignLeft:""},{default:(0,e.k6)((()=>[(0,e.eW)(" 两者生命周期都等同于GEngine,所以编辑器中停止游戏并不会释放内存。 ")])),_:1}),(0,e.bF)(a,{avatar:"../../assets/emoji/blzt.png",avatarWidth:40,alignLeft:""},{default:(0,e.k6)((()=>[(0,e.eW)(" 后面这种写法需要在设置中`项目设置`指定一下单例类。 ")])),_:1}),F,(0,e.bF)(a,{avatar:"../../assets/emoji/hh.png",avatarWidth:40},{default:(0,e.k6)((()=>[(0,e.eW)(" 如果不设置呢? ")])),_:1}),(0,e.bF)(a,{avatar:"../../assets/emoji/blzt.png",avatarWidth:40,alignLeft:""},{default:(0,e.k6)((()=>[(0,e.eW)(" 没有设置引擎会崩溃,因为他依赖GEngine的GameSingleton指针。 ")])),_:1}),j,(0,e.bF)(a,{avatar:"../../assets/emoji/blzt.png",avatarWidth:40,alignLeft:""},{default:(0,e.k6)((()=>[(0,e.eW)(" 当然,还可以利用CDO来创建。 ")])),_:1}),G,(0,e.bF)(o,{id:"151",data:[{id:"MySingleton.h"},{id:"MySingleton.cpp"}],"tab-id":"language"},{title0:(0,e.k6)((({value:n,isActive:s})=>[(0,e.eW)("MySingleton.h")])),title1:(0,e.k6)((({value:n,isActive:s})=>[(0,e.eW)("MySingleton.cpp")])),tab0:(0,e.k6)((({value:n,isActive:s})=>[U])),tab1:(0,e.k6)((({value:n,isActive:s})=>[_])),_:1},8,["data"]),M,(0,e.bF)(a,{avatar:"../../assets/emoji/hh.png",avatarWidth:40},{default:(0,e.k6)((()=>[(0,e.eW)(" 好像和游戏实例差不多耶! ")])),_:1}),(0,e.bF)(a,{avatar:"../../assets/emoji/blzt.png",avatarWidth:40,alignLeft:""},{default:(0,e.k6)((()=>
1[(0,e.eW)(" 确实,他的表现确实很像我们的游戏实例,但游戏实例的生命周期却没有EngineSingleton长。 关卡结束运行就会执行析构。 ")])),_:1}),(0,e.bF)(l,{src:"../../assets/unrealgif/gameinstancegif.gif"}),(0,e.bF)(a,{avatar:"../../assets/emoji/dsyj.png",avatarWidth:40,alignLeft:""},{default:(0,e.k6)((()=>[(0,e.eW)(" 使用了open+level重新打开了这个关卡。 ")])),_:1}),I,E,(0,e.bF)(a,{avatar:"../../assets/emoji/dsyj.png",avatarWidth:40,alignLeft:""},{default:(0,e.k6)((()=>[(0,e.eW)(" 严格意义上来说子系统并不是单例,但他的成员函数接口保证了只实例化一个子类,其中使用了一些高级C++特性和技巧,比如 引用计数、多态、重写等。后续的子系统篇会有详细介绍。 ")])),_:1}),x,(0,e.bF)(a,{avatar:"../../assets/emoji/hh.png",avatarWidth:40},{default:(0,e.k6)((()=>[(0,e.eW)(" 蓝图函数库是单例吗? ")])),_:1}),(0,e.bF)(a,{avatar:"../../assets/emoji/bqb (3).png",avatarWidth:40,alignLeft:""},{default:(0,e.k6)((()=>[(0,e.eW)(" 蓝图函数库(Blueprint Function Library)不是单例,蓝图函数库本质是静态函数库,这些函数可供蓝图(Blueprint)图表中的蓝图调用。 ")])),_:1}),O,(0,e.Lk)("p",null,[(0,e.Lk)("a",A,[(0,e.eW)("UE官方论坛"),(0,e.bF)(c)])]),(0,e.Lk)("p",null,[(0,e.Lk)("a",T,[(0,e.eW)("Cherno C++"),(0,e.bF)(c)])])])}]]),z=JSON.parse('{"path":"/unreal/core_%E6%A0%B8%E5%BF%83_/3-Singleton.html","title":"c3.Singleton|单例","lang":"zh-CN","frontmatter":{"title":"c3.Singleton|单例","order":300,"category":["u++"],"description":"默认构造函数 (Default Constructor): 如果没有为类定义任何构造函数,编译器将生成一个无参的默认构造函数。 析构函数 (Destructor): 如果没有显式定义析构函数,编译器将生成一个默认的析构函数。用于在对象生命周期结束时进行清理工作,如 ~MyClass()。 拷贝构造函数 (Copy Constructor): 如果没有定...","head":[["meta",{"property":"og:url","content":"https://rendertool.github.io/RenderDoc/unreal/core_%E6%A0%B8%E5%BF%83_/3-Singleton.html"}],["meta",{"property":"og:site_name","content":"RenderDoc"}],["meta",{"property":"og:title","content":"c3.Singleton|单例"}],["meta",{"property":"og:description","content":"默认构造函数 (Default Constructor): 如果没有为类定义任何构造函数,编译器将生成一个无参的默认构造函数。 析构函数 (Destructor): 如果没有显式定义析构函数,编译器将生成一个默认的析构函数。用于在对象生命周期结束时进行清理工作,如 ~MyClass()。 拷贝构造函数 (Copy Constructor): 如果没有定..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-02-17T00:40:22.000Z"}],["meta",{"property":"article:author","content":"Mr.Si"}],["meta",{"property":"article:modified_time","content":"2024-02-17T00:40:22.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"c3.Singleton|单例\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2024-02-17T00:40:22.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"Mr.Si\\",\\"url\\":\\"https://rendertool.github.io/RenderDoc/\\"}]}"]]},"headers":[{"level":3,"title":"经典模式","slug":"经典模式","link":"#经典模式","children":[]},{"level":3,"title":"EngineSingleton","slug":"enginesingleton","link":"#enginesingleton","children":[]},{"level":3,"title":"CDOSingleton","slug":"cdosingleton","link":"#cdosingleton","children":[]},{"level":3,"title":"GameInstance","slug":"gameinstance","link":"#gameinstance","children":[]},{"level":3,"title":"Subsystem|子系统","slug":"subsystem-子系统","link":"#subsystem-子系统","children":[]},{"level":3,"title":"问题","slug":"问题","link":"#问题","children":[]},{"level":3,"title":"扩展","slug":"扩展","link":"#扩展","children":[]}],"git":{"createdTime":1704306851000,"updatedTime":1708130422000,"contributors":[{"name":"sigaohe","email":"[email protected]","commits":2}]},"readingTime":{"minutes":6.75,"words":2024},"filePathRelative":"unreal/core[核心]/3-Singleton.md","localizedDate":"2024å¹´1月3日","excerpt":"\\n\\n\\
1n\\n<div class=\\"language-cpp\\" data-ext=\\"cpp\\" data-title=\\"cpp\\"><pre class=\\"language-cpp\\"><code><span class=\\"token macro property\\"><span class=\\"token directive-hash\\">#</span><span class=\\"token directive keyword\\">include</span> <span class=\\"token string\\">&lt;iostream&gt;</span></span>\\n<span class=\\"token keyword\\">class</span> <span class=\\"token class-name\\">MyClass</span> <span class=\\"token punctuation\\">{</span>  \\n<span class=\\"token punctuation\\">}</span>\\n<span class=\\"token keyword\\">int</span> <span class=\\"token function\\">main</span><span class=\\"token punctuation\\">(</span><span class=\\"token punctuation\\">)</span> <span class=\\"token punctuation\\">{</span>\\n    MyClass<span class=\\"token operator\\">*</span> a <span class=\\"token operator\\">=</span> <span class=\\"token keyword\\">new</span> <span class=\\"token function\\">MyClass</span><span class=\\"token punctuation\\">(</span><span class=\\"token punctuation\\">)</span><span class=\\"token punctuation\\">;</span>\\n    <span class=\\"token comment\\">//Do Someting</span>\\n    <span class=\\"token keyword\\">delete</span> a<span class=\\"token punctuation\\">;</span>\\n<span class=\\"token punctuation\\">}</span>\\n</code></pre></div>","autoDesc":true}')}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.