设计一个只能在堆上或栈上实例化的类
发布日期:2022-03-03 10:44:06 浏览次数:1 分类:技术文章

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


道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"<
return new FinalClass;
}
static void DeleteInstance(FinalClass* pInstance)
{
cout<<"Destructor of the class"<
delete pInstance;
pInstance = 0;
}private :
FinalClass() {}
~FinalClass() {}};int main(){
//use of CHeapOnly
FinalClass* fc = FinalClass::GetInstance();
FinalClass::DeleteInstance(fc);
return 0;}

转载地址:https://blog.csdn.net/yangjie6898862/article/details/44923809 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:C++11 std::bind std::function 高级用法 (c++11的新特性)
下一篇:设置windows程序客户区大小(个人感觉很好用以后就直接拿来用得了)

发表评论

最新留言

很好
[***.36.148.101]2022年07月27日 22时00分49秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章

中飞院计算机学院毕业后侍遇,【毕业季·计算机学院】年华在指间流动,出门已是江湖... 2020-01-10 11:49:26
Java捕获超时错误,获取java.io.IOException:读取失败,套接字可能关闭或超时,通过蓝牙打印机打印时读取ret:-1... 2020-01-10 11:49:26
java的优缺点 以及它用于什么,Java中的接口 - 它们用于什么? 2020-01-10 11:49:26
一级计算机考试计算,全国计算机一级MS OFFICE等级考试计算题(3) 2020-01-10 11:49:26
hardware计算机专业英语翻译,hardware是什么意思中文翻译 2020-01-10 11:49:25
vocab.com app android,Vocabulary.com 2020-01-10 11:49:25
韶关学院计算机专插本专业怎么样,2020年韶关学院专插本各专业计划人数和报考人数情况分析... 2020-01-10 11:49:25
西北工业太学计算机科学与技术周世钢,周世钢_西北工业大学研究生导师信息... 2020-01-10 11:49:25
电子计算机管理应用,电子计算机在企业管理中的应用研究分析原稿(全文完整版)... 2020-01-10 11:49:25
计算机组成原理八位全加器,8位全加器-课程设计 2020-01-10 11:49:25
计算机考研能换专业吗,我本科学的是计算机专业,现在想考研,但是想换一个适合自己的专业,和教育方面有关的专业,请问有什么好专业能选择的么?... 2020-01-10 11:49:25
从S3获取数据在html表示,javascript – 显示从s3获取的图像 2020-01-10 11:49:25
Android手机按键不灵,手机按键不灵怎么办 手机按键修改教程【详细步骤】 2020-01-10 11:49:25
刷php程序,PHP刷CSDN博客脚本 2020-01-10 11:49:25
通信原理及matlab仿真实验指导书,通信原理实验指导书——2015.pdf 2020-01-10 11:49:25
修复win10的更新服务器,win10升级服务器异常怎么解决_win10升级服务器发生异常修复方法... 2020-01-10 11:49:23
ajax session更新,ajax请求session超时时解决办法 2020-01-10 11:49:23
微信免密支付服务器忙,微信免密支付 查询用户授权记录,调起商家预授权 都返回系统繁忙... 2020-01-10 11:49:23
对使用数据源显示信息的web服务器控件,使用数据源控件绑定到数据 2020-01-10 11:49:23
ubuntu系统服务器维护,Ubuntu Server系列各项服务的安装和维护 Apache部分 2020-01-10 11:49:23