日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++ 单例模式 对全局变量的替代

發布時間:2025/3/20 c/c++ 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ 单例模式 对全局变量的替代 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前段時間要實習一個充值接口,創建了一個類(就叫類A好了),這個類A要和另外3個類進行交互,3個類對類A修改的數據是對其他類可見的。這種情況我想到了3個方法:

1.static 靜態成員,靜態成員為該類的所有實例所共享,3個類中各自創建一個類A的對象,它們對靜態成員的修改對其他類可見。

2.全局變量,類A的頭文件中添加 ? extern ?classA ?g_classA; 源文件中添加 classA g_classA; ? 3個類中添加頭文件后直接通過g_classA?  //這種不推薦

3.單例模式

?

使用單例模式替代全局變量,3個類對類A的函數訪問都是對類A的唯一實例的數據訪問,修改對其他類自然可見了。單例模式是使用全局變量的常見替代方法。

?

下面是轉自一位前輩的單例實現模式的總結,第三種實現實在太精彩了,只能用"nice catch"來形容!

——————————華麗的分割線——————————

轉自:http://lwzy-crack.blog.163.com/blog/static/9527204220091068526135/

C++中的單例模式?

單例模式很有用,使用單例模式,保證一個類僅有一個實例,并提供一個訪問它的全局訪問點,該實例被所有程序模塊共享。
但是在程序的開發過程中我們總是遇到一些問題,而這些問題主要集中在單例類的消毀過程中,普通使用的單例模式的類如下:
class Singleton:
{
??? // 其它成員
public:
??? static Singleton * GetInstance()
??? {
??????? if (m_pInstance == NULL)
??????????? m_pInstance = new Singleton();
??????? return m_pInstance;
??? }
?
private:
??? Singleton(){};
??? static Singleton * m_pInstance;
}

可是這個類在什么時候調用它的析構函數呢,我們怎么消毀它。提供一個公用的destroy函數來進行它的消毀嗎,這很不美觀。最后我就在網上找到了如果下的代碼處理了這個問題:
class Singleton:
{
??? // 其它成員
public:
??? static Singleton * GetInstance(){...}
private:
??? Singleton(){};
??? static Singleton * m_pInstance;
?
??? class CGarbo // 它的唯一工作就是在析構函數中刪除Singleton的實例
??? {
??? public:
??????? ~CGarbo(){
??????????? if (Singleton::m_pInstance)
??????????????? delete Singleton::m_pInstance;
??????? }
??? };
?
??? static CGarbo Garbo; // 定義一個靜態成員,在程序結束時,系統會調用它的析構函數
}

這是非常好的方法,靜態成員對象 Garbo 在析構時會自動的消毀單例,我們不用再擔心這個問題了。

但是添加一個類的靜態對象,總是讓人不太滿意,所以有人用如下方法來重現實現單例和解決它相應的問題,代碼如下:
class Singleton:
{
??? // 其它成員
public:
??? static Singleton &GetInstance(){
??????? static Singleton instance;
??????? return instance;
??? }
?
private:
??? Singleton(){};
}
使用局部靜態變量,非常強大的方法,完全實現了單例的特性,而且代碼量更少,也不用擔心單例消毀的問題。
在后期的項目中我全使用了這種方法,可是在項目的開發過程中還是出現了問題,當如下方法使用單例時問題來了,
Singleton singletion = Singleto::GetInstance();
這么做就產生了一個類拷貝的問題,這就為背了單例的特性。
產生這個問題的原因在于,編譯器會為類生成一個默認的構造函數,來支持類的拷貝。
最后沒有辦法,我們要禁止類拷貝和類賦值,禁止程序員用這種方式來使用單例,當時領導的意思是GetInstance()函數返回一個指針而不是返回一個引用,函數代碼改為如下:
??? static Singleton *GetInstance(){
??????? static Singleton instance;
??????? return &instance;
??? }

可我總是感覺不好,為什么不讓編譯器不這么干呢。這時我才想起可以顯式的聲明類拷貝的構造函數,和重載=操作符,新的單例類如下:

class Singleton:
{
??? // 其它成員
public:
??? static Singleton &GetInstance(){
??????? static Singleton instance;
??????? return instance;
??? }
?
private:
??? Singleton(){};

??? Singleton(const Singleton&);
??? Singleton & operate = (const Singleton&);
}
關于Singleton(const Singleton&);和Singleton & operate = (const Singleton&);函數,我們要聲明成私用的,并且只聲明不實現。這樣子后如果用上面的方式來使用單例時,不管是在友元類中還是其它的,編譯器都是報錯。
不知道這樣的單例類是否還會有問題,但在程序中這樣子使用已經基本沒有問題了。

?

——————————華麗的分割線——————————

?

?

轉載于:https://www.cnblogs.com/sixbeauty/p/3790693.html

總結

以上是生活随笔為你收集整理的c++ 单例模式 对全局变量的替代的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美性福利 | 欧美xxxxx性| 大度亲吻原声视频在线观看 | 亚洲男男网站 | 日韩视频在线观看视频 | 日韩网站免费观看高清 | 国产原创视频在线 | 91色啪| 青青操av在线 | 亚洲欧美一区在线 | 999在线观看视频 | 亚洲激情av| 视屏一区| 国产精品夜夜 | 亚洲欧美自拍视频 | 免费观看国产精品 | 校园春色综合 | 日韩精品一区二区三区免费视频 | www.99视频 | 日本性视频网站 | 国精产品一区一区三区有限公司杨 | 中文写幕一区二区三区免费观成熟 | 国产sm网站 | 日韩大片在线 | 久久中文字幕人妻熟av女蜜柚m | 九七超碰在线 | 3p视频在线观看 | 国产精品久久久久久久久久久久久久 | 日本少妇一区二区三区 | 影音先锋成人网 | 欧美成人精品一区二区免费看片 | 嫩草视频91 | 伊人网综合 | 拔插拔插海外华人免费视频 | 蜜桃免费av | 亚洲美女屁股眼交 | 亚洲乱熟女一区二区 | 精品国产一 | 欧美国产一二三区 | 天天射天天射 | 黄网站免费观看 | 激情啪啪网 | 成年人看的视频网站 | 久久人人妻人人人人妻性色av | 亚洲国产日韩欧美一区二区三区 | 亚洲免费观看高清 | 玖玖免费 | 免费观看成年人网站 | 理论片第一页 | 午夜性视频 | 欧美精品video| 原来神马电影免费高清完整版动漫 | 一本大道一区二区 | 中文 日韩 欧美 | av中文一区 | 国产乱叫456在线 | 日本理论中文字幕 | 久久只有这里有精品 | 色优久久 | 天天色综合久久 | 天天干夜夜看 | 国产 xxxx | 日批在线播放 | 麻豆伊甸园 | 欧美国产精品一区二区 | 日本少妇一级 | 亚洲精品一区二区三 | 鲁一鲁一鲁一鲁一av | 上原亚衣在线观看 | 东京av在线| 少妇av在线播放 | 999免费| 99精品乱码国产在线观看 | 老司机精品福利导航 | 免费国产a级片 | 毛片无遮挡 | 亚洲久久综合 | 综合久久影院 | 日韩成人av一区 | 日本久久综合网 | 亚洲AV成人无码久久精品同性 | 欧美区在线观看 | 国产69页| 在线一区二区三区四区五区 | 国产香蕉久久 | 性饥渴的农村熟妇 | 99国产精品久久久久久久成人 | 日本午夜激情 | 欧美大波大乳巨大乳 | 久久不射视频 | 男人的天堂成人 | 九九视频免费 | 亚洲玖玖爱 | 肉丝美脚视频一区二区 | sese在线视频 | 麻豆日韩 | 极品新婚夜少妇真紧 | 日本综合视频 | 欧美伊人网 |