1. 程式人生 > >C++中單例物件的記憶體自動釋放

C++中單例物件的記憶體自動釋放

單例模式是一種在設計中很常用的模式,通過static函式建立一個物件,以後的所有的資料都通過該函式操作,保持資料唯一,用起來也很方便,但是有個小小的問題,就是單例物件的釋放問題,一般我們都是程式退出的時候統一釋放物件,但是這並不是特別完美,有時候你可能會忘記呼叫,然後就發生了記憶體洩露,當然,現代作業系統會對每個程式進行記憶體管理,程式銷燬的時候,這個程式所建立申請的記憶體資源都會被回收,不過這是後話,我們當然還是應該編寫沒有記憶體洩露的程式。
眾所周知,C++這門語言並沒有其他一些語言裡的垃圾回收機制,程式設計師需要手動管理記憶體,指標很強大,但是操作不好的時候,也容易產生問題…下面提供一種單例物件的自動記憶體釋放的方法,可以用在程式設計裡,很方便,最關鍵的是記憶體可以做到自動釋放啦:-)

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 /* * Singleton.h * *  Created on: May  10, 2012 *      Author: IceCoffee
*/ #include "vld.h" #include <iostream> class Singleton { public: ~Singleton() { std::cout << " ~Singleton()" << std::endl; } static Singleton* Instance() { if(m_pSingleton == nullptr) { m_pSingleton = new Singleton(); } return m_pSingleton; } private
: class AutoRelease { public: ~AutoRelease() { if(Singleton::m_pSingleton != nullptr) { delete Singleton::m_pSingleton; Singleton::m_pSingleton = nullptr; } } }; private: static Singleton* m_pSingleton; static AutoRelease m_auto; }; Singleton* Singleton::m_pSingleton = nullptr; Singleton::AutoRelease Singleton::m_auto;

相關推薦

C++物件記憶體自動釋放

單例模式是一種在設計中很常用的模式,通過static函式建立一個物件,以後的所有的資料都通過該函式操作,保持資料唯一,用起來也很方便,但是有個小小的問題,就是單例物件的釋放問題,一般我們都是程式退出的時候統一釋放物件,但是這並不是特別完美,有時候你可能會忘記呼叫,然後就發生了記憶體洩露,當然,現代作業系統

C#的實現方法

inter sed .html thumb otto pri www ati code 本文實例講述了C#中單例的實現方法。分享給大家供大家參考。具體實現方法如下: 代碼如下: #region “實現這個窗口類的單例,單例類常用於被主窗口以show()方法打開的窗口

Java物件不會被GC回收

hotspot虛擬機器的垃圾收集演算法使用根搜尋演算法。這個演算法的基本思路是:對任何“活”的物件,一定能最終追溯到其存活在堆疊或靜態儲存區之中的引用。通過一系列名為根(GC Roots)的引用作為起點,從這些根開始搜尋,經過一系列的路徑,如果可以到達java堆中的物件,那麼這個物件就是

關於C++模式記憶體釋放問題的一點點總結

目錄 寫在最前面   網路上有很多關於C++單例模式的帖子,其中不乏精品之作。本篇文字在吸收了精華之餘,僅作了個人的一點點總結。   通過new出一個物件來實現的單例,不論單例是通過餓漢方式,還是懶漢方式來實現,都面臨一個問題,即new出來的

c++ 子類物件與父類物件記憶體關係

  問題:如題。假設有父類A與子類B A例項化一個物件a   B例項化一個物件b 那麼在記憶體中 a與b的地址關係是什麼。是他們的首地址都一樣嗎? 解答: 他們是沒有必然關係的。就跟你隨便生成另外兩個其他型別的變數一樣。當然,你例項化的物件b跟A有關係。 b物件開頭的部分4

C++實現模式(包括採用C++11的智慧指標)

    對於設計模式來說,以前只是看過基礎的理論,很多都沒有實現和使用過。這段時間看到了別人C++程式碼中使用了單例模式,發現了很多新的東西,特此總結記錄一下。說話比較囉嗦,希望由淺入深,幫助大家理解!     單例模式,顧名思義,即一個類只有一個例項物件。C++一般的方法

c#利用WMI物件獲取實體記憶體和可用記憶體大小資訊

通常我們在獲取記憶體資訊時會呼叫Win32 API的GlobalMemoryStatus和GlobalMemoryStatusEx函式,但是,當您的電腦上裝有2根或2根以上的記憶體條時,這兩個API只能獲取1根記憶體條的使用資訊,並不能正確獲取記憶體資訊。 經過一番折騰

c++之模式

lsi 但是 desc 模式 單例模式 ron spl 希望 構造函數 1 本篇主要討論下多線程下的單例模式實現:   首先是 double check 實現方式: 這種模式可以滿足多線程環境下,只產生一個實例。 template<typename T>

C#】模式&lt;機房重構&gt;

機房 .sh 不能 是否 gist 應用 調用方法 單例模式 sender 前言 在機房重構之前。我們學習了設計模式。在這次重構中,我們的任務就是將這些模式,加入到機房的重構中去。如今先來解決一個最簡單的問題——窗口的超生。 假設不加以限

c++的模式及c++11對模式的優化

on() end per let namespace lease 是否 存在 建立 單例模式 單例模式,可以說設計模式中最常應用的一種模式了,據說也是面試官最喜歡的題目。但是如果沒有學過設計模式的人,可能不會想到要去應用單例模式,面對單例模式適用的情況,可能會優先考慮使用全

java和多的區別

單例 多例 區別 線程 1. 什麽是單例多例:所謂單例就是所有的請求都用一個對象來處理,比如我們常用的service和dao層的對象通常都是單例的,而多例則指每個請求用一個新的對象來處理,比如action; 2. 如何產生單例多例:在通用的SSH中,單例在spring中是默認的,如果要產生多例

Python設計模式模式的實現及在Tornado的應用

實例 類變量 attribute rap all wrap 線程 ++ 出現 單例模式的實現方式 將類實例綁定到類變量上 class Singleton(object): _instance = None def new(cls, *args): if not isinst

7、【C++】模式/工廠模式

一、單例模式     單例模式,可以說設計模式中最常應用的一種模式了,據說也是面試官最喜歡的題目。但是如果沒有學過設計模式的人,可能不會想到要去應用單例模式,面對單例模式適用的情況,可能會優先考慮使用全域性或者靜態變數的方式,這樣比較簡單,也是沒學過設計模式的人所能想到的最簡單的方式了。

C/C++】模式 Singleton

Backto C/C++ Index //.h class Singleton { public: static Singleton* instance(); static void Close(); private: Singleton(); ~Singleton

C# 批量設定物件的DateTime屬性為最小值

C# 的最小時間是 0001-01-01, 而資料庫的最小時間一般是要大於這個值: Net Framewrok 中, DateTime.MinValue => 0001/01/01 00:00:00 SqlDateTime.MinValue.Value  => 17

c++string類物件和字元陣列之間的相互轉換

string類在c++中是一個模板類,位於名字空間std中,注意這裡不是string.h,string.h是C字串標頭檔案。   將string型別轉換為字元陣列char arr[10];string s("ABCDEFG");int len = s.copy(arr,&nb

物件的建立時機在第一次getInstance時

如題:單例物件的建立時機在第一次getInstance時 為說明此問題,摘錄工程中的一段程式碼如下: /** * @className TimerUI * @description TODO 倒計時介面顯示類 * @author [email protected] *

C++不同型別物件的存放位置

C++中不同型別物件的存放位置 1. 儲存區域 2. 不同型別物件的儲存 2.1 全域性物件 2.2 區域性物件 2.3 靜態區域性物件 2.4 動態物件 在C++中,定義的物件被放在不同的區域中,

python模式的執行緒安全問題

看了好多文章都是java實現的,特此寫一篇python的。 這個問題的兩種解決方案: 1.最簡單粗暴的就是在系統中先生成一個單例,就不存線上程安全問題了 2.用雙重同步鎖去實現,一把鎖加外面,一把鎖加里面: class Singleton(object): __instance

c++】模式

文章目錄 1.單例模式介紹 2.餓漢模式 1)簡單瞭解 2)優點:簡單 3)缺點:啟動時可能有負載導致啟動很慢 4)程式碼實現 3.懶漢模式 1)簡單瞭解