C++的私有構造函數和析構函數

很多情況下,對于一個類,要求當前的程序中只能存在一個類的實例。例如一個程序只有一個數據庫的連接,或者只有一個網絡訪問接口。

此時,可以將類的構造函數和析構函數聲明為private.

class db_connent
{
private:
? ? ? ? ? db_connent();
? ? ? ? ? ~db_connent();
...............
}

由于在class外部不允許訪問私有成員,因此,在class外部不能構造新的對象,也不能析構對象,否則將導致編譯出錯。

在這種情況下,一般會有一個public的static成員函數,給用戶提供調用的接口。static成員函數能夠訪問到class的私有域,可以將類的對象構造函數放進去。

//xxx.h文件
class db_connent
{
private:
db_connent();
~db_connent();

public:
static? db_connent*? instance();
private:
static? db_connent*? the_object;
}

//xxxx.cpp文件

static? db_connent*? db_connent::the_object=NULL;

static? db_connent* db_connent::instance()
{
if(NULL==the_object)
? ? ? {
? ? ? the_object = new db_connent();
? ? ? if(NULL==the_object)
?????? return NULL;
? ? ? }
return the_object;
}


總結一下,把析構函數定義為私有的,就阻止了用戶在類域外對析構函數的使用。這表現在如下兩個方面:

1. ? 禁止用戶對此類型的變量進行重復定義。
2. ? 禁止用戶在程序中使用 ? delete ? 刪除此類型對象。

在接口的設計層面上,防止了客戶對該類型對象的錯誤操作。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 轉至元數據結尾創建: 董瀟偉,最新修改于: 十二月 23, 2016 轉至元數據起始第一章:isa和Class一....
    40c0490e5268閱讀 1,768評論 0 9
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • Introduction to C++ (Season 1) Unit 1: Overview of C++ 第1...
    我是阿喵醬閱讀 2,771評論 0 7
  • 對象的創建與銷毀 Item 1: 使用static工廠方法,而不是構造函數創建對象:僅僅是創建對象的方法,并非Fa...
    孫小磊閱讀 2,031評論 0 3