題目 寫乙個只能構造乙個物件的類

2021-05-21 15:40:49 字數 1299 閱讀 4654

題目:寫乙個只能構造乙個物件的類

整理:cmdhack

2023年1

月24日19:47:49

分析:建構函式分為有參構造

無參構造

拷貝構造

三種方法

物件又分為棧中構造物件和堆中構造物件

首先來按照普通的做法寫乙個類如下

很顯然如果單單這樣可以構造無數個物件

那我設想一下如果在建構函式中做乙個

限制比如

構造乙個物件之後

如果產生第二個物件就將其刪除如何呢

一:delete this (

只對堆中的物件起作用)

二:用個靜態變數做次數限制

如果產生乙個物件之後再產生物件立刻呼叫析構函式

(如果是在棧中產生的物件

那麼這個變數的生死存亡只有由系統決定即

顯示呼叫析構函式沒有任何效果,

當然如果是在堆中產生的物件可以在析構函式

中使用delete this

顯示呼叫析構函式可以刪除物件)

所以如果建構函式屬於

public

的話我們是沒有辦法只產生乙個物件的

====

那麼只有將建構函式的放在private:中了

那如果是private怎麼來呼叫建構函式構造物件呢  成員函式麼  當然不是了

成員函式的呼叫約定是_thiscall  沒有物件怎麼呼叫呢   那只有用剛剛學過的靜態成員函式(_cdecl呼叫約定) 沒有物件也可以呼叫  然後再用靜態成員變數來做個數限制   具體實現過程如下

//#include "stdafx.h"

#include //寫乙個只能有乙個例項的類。

class only

only( int i )

~only()

}int m_i;

static int m_ncount;

public:

static only* createobject(int i);

static only* createobject();

void print()

}} void release()

};int only::m_ncount = 0;

//靜態成員函式,是類內的函式,可以訪問私有成員/函式

only* only::createobject(int i)

return pret;

}only* only::createobject()

return pret;

}int main(int argc, char* argv)

定義乙個只能在棧上構造物件的類

只能在堆上定義的物件可以通過宣告建構函式是私有的,然後提供兩個靜態的方法,乙個方法用來獲取堆上的物件,乙個用來釋放堆上的物件。c 中定義乙個不能被繼承的類中第二種方法就是通過這種方式宣告了乙個不能被繼承的類,但是這個類的物件就只能位於堆中了。那麼如何一定乙個只能在棧上構造的物件?這個就涉及到了c 中...

定義乙個類讓其只能例項化乙個物件

乙個類只例項化出乙個物件稱為單例模式 include class singleclass else private singleclass static int count 靜態成員變數count,不允許在類中初始化。定義為const則可以在這初始化,但是不可更改,不適合在這使用 int singl...

設計乙個類,只能生成該類的乙個例項

只能生成乙個例項的類是實現了singleton 單例 模式的型別。解題思路 根據題目的要求,1.必須把建構函式設為私有函式,防止他人建立例項。2.在類中建立靜態私有的例項,在需要時建立該例項,直到程式結束才銷毀。3.提供乙個靜態的公有的函式用於建立 獲取靜態私有物件。在系統的日誌輸出,gui應用必須...