博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计一个只能在堆上或栈上实例化的类
阅读量:5882 次
发布时间:2019-06-19

本文共 1391 字,大约阅读时间需要 4 分钟。

一道C++笔试题:设计一个只能在堆内存上实例化的类和一个只能在栈内存上实例化的类

只能在堆内存上实例化的类:将析构函数定义为private,在栈上不能自动调用析构函数,只能手动调用。也可以将构造函数定义为private,但这样需要手动写一个函数实现对象的构造。

只能在栈内存上实例化的类:将函数operator new和operator delete定义为private,这样使用new操作符创建对象时候,无法调用operator new,delete销毁对象也无法调用operator delete。

#include 
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 
using namespace std;//只能在堆内存上实例化的类class FinalClass{public : static FinalClass* GetInstance() { cout<<"Constructor of the class"<

 

 

转载地址:http://wopix.baihongyu.com/

你可能感兴趣的文章
类的实例化
查看>>
Python学习笔记__12.9章 urlib
查看>>
Ansible自动化运维亲身经验之谈
查看>>
python 高阶函数:map、reduce
查看>>
css图片整合
查看>>
使用阿里云ACM简化你的Spring Cloud微服务环境配置管理
查看>>
修改默认view
查看>>
去中心化、中介化的区块链技术
查看>>
对话DeepMind创始人:建立通用人工智能
查看>>
linux中awk工具的使用
查看>>
我在51CTO微职位学软考——我是mata宇我为自己代言
查看>>
POJ 1852 Ants
查看>>
python
查看>>
SIEM在PCI DSS和安全等级保护合规性中的作用
查看>>
MySQL技术综合
查看>>
Linux就该这么学-第五课
查看>>
好程序员前端分享使用JS开发简单的音乐播放器
查看>>
奥马冰箱:用设计创新突破行业“天花板”
查看>>
Oracle Database 11g SQL开发指南
查看>>
ACM一些小的注意事项 持续更新ing
查看>>