91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

設計一個只能在堆內存上實例化的類和一個只能在棧內存上實例化的類

發布時間:2020-07-02 10:04:05 來源:網絡 閱讀:312 作者:小止1995 欄目:編程語言

只能在堆內存上實例化的類:將析構函數定義為private,在棧上不能自動調用析構函數,只能手動調用。也可以將構造函數定義為private,但這樣需要手動寫一個函數實現對象的構造。

只能在棧內存上實例化的類:將函數operator new和operator delete定義為private,這樣使用new操作符創建對象時候,無法調用operator new,delete銷毀對象也無法調用operator delete。

#include <iostream>
using namespace std;

//只能在堆內存上實例化的類
class CHeapOnly
{
public:
	CHeapOnly()
	{
		cout << "Constructor of CHeapOnly!" << endl;
	}

	void Destroy() const
	{
		delete this;
	}

private:
	~CHeapOnly()
	{
		cout << "Destructor of CHeapOnly!" << endl;
	}
};

//只能在棧內存上實例化的類,就是不能使用new來構造類,把operator new私有化
class CStackOnly
{
public:
	CStackOnly()
	{
		cout << "Constructor of CStackOnly!" << endl;
	}

	~CStackOnly()
	{
		cout << "Destrucotr of CStackOnly!" << endl;
	}

private:
	void* operator new(size_t size)
	{
	}

	void operator delete(void * ptr)
	{
	}
};

int main()
{
	CHeapOnly* pHeap = new CHeapOnly;
	pHeap->Destroy();
	CStackOnly objStack;
	return 0;
}
//只能在堆內存上實例化的類
// 下面一個類也只能在堆內存上生成,將構造函數和析構函數都定義為private,
//但是可以通過類的static函數創建對象,不過這個對象是不能被繼承的。
class FinalClass
{
public:
	static FinalClass* GetInstance()
	{
		cout << "Constructor of the class" << endl;
		return new FinalClass;
	}

	static void DeleteInstance(FinalClass* pInstance)
	{
		cout << "Destructor of the class" << endl;
		delete pInstance;
		pInstance = 0;
	}

private:
	FinalClass() {}
	~FinalClass() {}
};

int main()
{
	FinalClass* fc = FinalClass::GetInstance();
	FinalClass::DeleteInstance(fc);

	return 0;
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

佛山市| 凉城县| 宝山区| 英吉沙县| 格尔木市| 元朗区| 高要市| 永城市| 九江县| 高阳县| 三亚市| 乃东县| 缙云县| 米泉市| 青浦区| 吴川市| 金沙县| 手游| 卢湾区| 神农架林区| 隆德县| 新绛县| 广德县| 大悟县| 资源县| 栾川县| 东明县| 庐江县| 洪泽县| 东乌| 威远县| 武威市| 桃源县| 伊金霍洛旗| 苏州市| 河东区| 中江县| 阿拉善盟| 龙里县| 灯塔市| 合阳县|