您的位置:首页 > 其它

设计一个只能在堆上或栈上实例化的类

2012-04-02 21:17 253 查看
设计一个只能在堆内存上实例化的类和一个只能在栈内存上实例化的类:

//只能在堆内存上实例化的类
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()
{
//use of CHeapOnly
CHeapOnly* pHeap = new CHeapOnly;
pHeap->Destroy();

//err use of CHeapOnly
//CHeapOnly objHeap;

//use of CStackOnly
CStackOnly objStack;

//error use of CStackOnly
//CStackOnly* pStack = new CStackOnly;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐