博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
只允许对象生成于堆内
阅读量:6148 次
发布时间:2019-06-21

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

只允许对象生成于堆内?怎么理解?肿么办?

我们已经知道,假如手头上有一个类Person,当你在程序中写下Person objTemp;时,

编译器悄悄地做了两件事:调用constructor构造对象objTemp,而在弹栈时,调用析构函数destructor析构掉对象objTemp。

对象rn的构造和析构全部由编译器负责,这是栈的特性!

诸所周知,对象rn生成于栈内。

而我们现在的要求是什么?“只允许对象生成于堆内。”rn明显违背了我们的要求,也就意味着它应该被禁止。

那这种 “坑爹型”的事情肿么办呢?有人想说,只要让Person的构造函数或者析构函数成为private就OK了。

也许许多人真会有这样的第一想法,假使那样,咱再往下进一步思考。

如果那样的话,这个类可以实现继承吗?No,即就是禁止继承。

另外,这个类允许其他类拥有它的对象吗?No,即就是禁止包含。

那怎么办呢? 解决的方法也很简单,解除继承的副作用只需让Person的析构函数成为protected就可以了;

解决内含的副作用只需让Test中的成员变量ps成为Person*类型并在Test的构造/析构函数中对成员变量做初始化和释放操作就可以了。

本例完整的代码如下所示。

1 #include
2 using namespace std; 3 4 class Person 5 { 6 public: 7 Person() 8 { 9 cout<<"Con()"<
Destroy();45 }46 private:47 Person *ps;48 };49 50 void main()51 {52 Test t1;53 }

Good Good Study, Day Day Up.

顺序  选择  循环  坚持

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

你可能感兴趣的文章
关于HEXO安装失败的解决方法
查看>>
charles-web端开发者实用功能点
查看>>
javascript学习笔记之时间定制器
查看>>
SpringMVC-@CookieValue
查看>>
使用epoll方式监控键盘等设备输入
查看>>
linux 文件操作
查看>>
页面通过功能点获取值
查看>>
理解HTTP协议(转载)
查看>>
验证多行文本框输入长度的正则表达式
查看>>
Java String 和JSON转换
查看>>
机器人研究领域
查看>>
C#泛型-模板特化
查看>>
关于 C++ 删除函数的一点问题
查看>>
GitHub如何下载clone指定的tag
查看>>
webservice xfire编写webService接口
查看>>
linux---文件颜色含义
查看>>
项目Alpha冲刺Day1
查看>>
学术家族树Alpha Release -- Microsoft Academic Search Family Tree project
查看>>
mi家前端面经
查看>>
五种清除浮动的方式
查看>>