设计一个只能在堆上或栈上实例化的类
来源:互联网 发布:云计算入门书籍 编辑:程序博客网 时间:2024/06/05 05:34
道C++笔试题:设计一个只能在堆内存上实例化的类和一个只能在栈内存上实例化的类只能在堆内存上实例化的类:将析构函数定义为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(){ //use of CHeapOnly CHeapOnly* pHeap = new CHeapOnly; pHeap->Destroy(); //error use of CHeapOnly //CHeapOnly objHeap; //use of CStackOnly CStackOnly objStack; //error use of CStackOnly //CStackOnly* pStack = new CStackOnly; return 0;}
下面一个类也只能在堆内存上生成,将构造函数和析构函数都定义为private,但是可以通过类的static函数创建对象,不过这个对象是不能被继承的。
#include <iostream>using namespace std;//只能在堆内存上实例化的类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(){ //use of CHeapOnly FinalClass* fc = FinalClass::GetInstance(); FinalClass::DeleteInstance(fc); return 0;}
0 0
- 设计一个只能在堆上或栈上实例化的类
- 设计一个只能在堆上或栈上实例化的类
- 设计一个只能在堆上或栈上实例化的类
- 设计一个只能在堆上或栈上实例化的类
- 设计一个只能在堆上或栈上实例化的类
- 设计一个只能在堆上或栈上实例化的类
- 设计一个只能在堆上或栈上的类
- 限定只能在栈或堆上实例化的类
- 如何定义一个只能在堆上(或栈上)生成对象的类
- 怎么限制一个类的对象实例,只能在"堆"上分配,或者只能在"栈"上分配
- 设计一个类只能在堆(栈)上创建
- [C++]限制一个类的对象只能在栈或堆上创建
- 如何定一个只能在堆上或者只能在栈上定义的类
- C++限制一个类只能在堆上或栈上分配
- 设计只能在堆或者栈上创建的类
- 设计只能在堆或者栈上创建的类
- 设计只能在堆或者栈上创建的类
- 创建一个不能被继承的类和只能在堆上(或栈上)创建对象
- AndroidStudio 使用技巧:重置Android DDMS 面板
- 优化措施
- git merge
- 为什么Android的图片质量会比iPhone的差?
- 九宫格布局
- 设计一个只能在堆上或栈上实例化的类
- php 绘图合并两张jpg图片 并在图片上写字
- 如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)?
- 奇怪的开方
- 【Android开发经验】Android开发相关的Blog推荐——跟随大神的脚步才能成长为大神
- printk_timed_ratelimit 使用 , 可以防止 打太多log kernel 发生 soft lockup卡死
- P52第24题
- 蓝桥杯 地址转换
- 漫谈应用缓存的命中率问题