💗 💗 博客:小怡同學
💗 💗 個人簡介:編程小萌新
💗 💗 如果博客對大家有用的話,請點贊關注再收藏
🌞
僅在堆上創建對象的類
將類的構造函數,拷貝構造私有,防止在棧上生成對象
提供靜態成員函數,該靜態成員函數中完成堆對象的創建,用類名::函數的方式調用該函數
目的是返回一個在堆上生成的對象
class HeapOnly
{
private:HeapOnly(){}HeapOnly(const HeapOnly& h) = delete;HeapOnly& operator=(const HeapOnly&) = delete;//防止拷貝
public:static HeapOnly* GetHeapOnly(){return new HeapOnly;}
};
僅在棧上創建對象的類
將類的構造函數私有防止在堆上生成對象
提供靜態成員函數,該靜態成員函數中完成堆對象的創建,用類名::函數的方式調用該函數
目的是返回一個在棧上生成的對象
注意:不能拷貝函數=delete因為該靜態函數返回的是值拷貝需要調用拷貝構造
class StackOnly
{
private:StackOnly(){}void* operator new(size_t size) = delete;public:
//不能引用是因為st出棧后會被銷毀static StackOnly GetStackOnly(){StackOnly st;return st;}
};
設計不能被繼承的類
將基類用final關鍵字標志
class test final
{
private:test(const test& v) = delete;test& operator=(const test& v) = delete;
public:int _a;test(int a):_a(a){}
};
設計單例對象
單例模式
一個類只能創建一個對象,即單例模式,該模式可以保證系統中該類只有一個實例,并提供一個訪問它的全局訪問點,該實例被所有程序模塊共享。
//單例模式有兩種情況
餓漢模式:
是說不管你將來用不用,程序啟動時就創建一個唯一的實例對象
懶漢模式:
例對象構造十分耗時或者占用很多資源所以
懶漢模式延遲加載的方式更好
//單例模式的特定就是 構造函數私有 調用靜態成員函數返回靜態或者全局的變量/指針
餓漢模式
namespace hunry
{class Single{private:static Single tmp;Single(){}public:static Single GetInstance(){return tmp;}};
}
懶漢模式
namespace lazy
{class Single{private:static Single* tmp;Single(){}public://因為需要顯示調用析構函數所以設置這個類static Single* GetInstance(){if (tmp == nullptr)return tmp = new Single;elsereturn tmp;}static Single Destory(){if (tmp == nullptr){delete tmp;tmp = nullptr;}}};Single* Single::tmp = nullptr;
}