1,限制类的对象只能生成在栈上

将 operator new 各种原型设为私有

#include <iostream>class OnlyOnStack {
public:OnlyOnStack() {std::cout << "ctor!" << std::endl;   }~OnlyOnStack() {std::cout << "dctor!" << std::endl;   }
private:void* operator new (std::size_t size);void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) noexcept;void* operator new (std::size_t size, void* ptr) noexcept;void* operator new[](std::size_t size);void* operator new[] (std::size_t size, const std::nothrow_t& nothrow_value) noexcept;void* operator new[] (std::size_t size, void* ptr) noexcept;
};int main() {OnlyOnStack stack;// OnlyOnStack *ps = new OnlyOnStack;
}

2,限制类的对象只能生成在堆上,有两种方法

2.1 使用单例模式:构造函数私有,getInstance()中获取单例时new 出来一个

2.2 析构函数私有,这样编译器就会自动阻止你定义栈上对象,析构函数私有了就需要类提供一个public的销毁函数给外部用

C++如何限制对象在堆上或栈上生成相关推荐

  1. C/Cpp / 如何定义一个只能在堆上(栈上)生成对象的类?

    在 C++ 中,类的对象建立分为两种,一种是静态建立,如 A a:另一种是动态建立,如 A* ptr = new A:这两种方式是有区别的. 静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是 ...

  2. 如何限制对象只能建立在堆上或者栈上

    转自http://blog.csdn.net/szchtx/article/details/12000867# 在C++中,类的对象建立分为两种,一种是静态建立,如A a:另一种是动态建立,如A* p ...

  3. 如何定义一个只能在堆上(栈上)生成对象的类?

    在C++中,类的对象建立分为两种,一种是静态建立,如A a:另一种是动态建立,如A* ptr=new A:这两种方式是有区别的. 静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动 ...

  4. c++如何定义一个只能在堆上(栈上)生成对象的类?

    只能在堆上 方法:将析构函数设置为私有 原因:C++ 是静态绑定语言,编译器管理栈上对象的生命周期,编译器在为类对象分配栈空间时,会先检查类的析构函数的访问性.若析构函数不可访问,则不能在栈上创建对象 ...

  5. 结构体的两种声明方式:堆上和栈上以及在双链表的应用

    在看<算法精解:C语言描述>的双链表chtbl和redis的双链表adlist.c发现代码思路基本是一致的. 但是,对于链表的初始化却不一样 1.<算法精解:C语言描述>风格 ...

  6. 多态指针访问虚函数不能被继承的类快速排序N皇后问题插入排序堆排序merge归并排序栈上生成对象两个栈实现一个队列...

    多态 /*1. 要想实现覆盖(重写)父类必须声明为virtual,子类可以不声明为virtual.-->FunB()2. 派生类重写基类的虚函数实现多态,要求函数名.参数列表.返回值完全相同.( ...

  7. C++:在堆上创建对象,还是在栈上?

    这篇文章来自于一次讨论:http://www.devbean.net/2013/01/qt-study-road-2-model-view/#comment-17532.关于究竟是在堆上还是在栈上创建 ...

  8. java创建对象时分配内存方式,是堆上分配还是栈上分配?

    创建对象的内存是分配在堆上还是栈上面?大部分童鞋的回答是这样的:"肯定分配在堆内存的嘛,栈内存是属于子线程和基本数据类型专用的内存空间,怎么会分配到栈上面呢?",这个回答嘛,也对, ...

  9. 计算机中的堆和和栈(物理内存上的解释)

    编程语言书籍中经常解释值类型被创建在栈上,引用类型被创建在堆上,但是并没有本质上解释这堆和栈是什么.我仅有高级语言编程经验,没有看过对此更清晰的解释.我的意思是我理解什么是栈,但是它们到底是什么,在哪 ...

最新文章

  1. C++ 类的大小计算
  2. mysql for Mac 下创建数据表中文显示为?的解决方法
  3. android活动管理器,Android 中管理所有的 Acyivity 活动
  4. Android隐藏EditText长按菜单中分享功能探索
  5. ABAP的自学之路 ,初步认识ABAP 一
  6. js中 style.width与 offsetWidth的区别
  7. 50 MM配置-库存管理和实际库存-自动建立库存地点
  8. CentOS6.8 下MySQL5.6.29主从复制架构配置
  9. 感谢你不哀不丧不怜,为平凡的努力喝彩
  10. NTFS for Mac支持Mac拷贝文件到硬盘
  11. 王道考研操作系统笔记(第一章)附:王道考研408所有PPT和思维导图
  12. TiledMap使用笔记
  13. linux离线安装系统工具arping
  14. android通知小图标灰色,android – 大型通知图标旁边的灰色圆圈?
  15. 亨利福特真的说过“faster horse”么?
  16. AD硬件电路模块设计——PS7219及单片机的SPI接口电路
  17. 【python 淘宝爬虫】python 淘宝店铺名称,旺旺,销售量 抓取
  18. javaScript:结合mousedown、mousemove、mouseup事件,实现拖动方块在页面内移动(代码)
  19. 数据库作业:SQL练习3 - SELECT(单表查询)
  20. 修改项目启动输出日志格式

热门文章

  1. mybatis插入mysql出现中文乱码
  2. 【技术备忘录】H3C、华为网络设备Telnet的基本配置
  3. 项目范围管理:WBS
  4. Geoserver中切割离线瓦片TileLayer预览时放大之后缺失
  5. el-table中设置max-height属性使其固定表头
  6. Android中怎样使用MediaPlayer播放byte数组音频文件
  7. Express中间件的应用-路由保护(登录限制)、网站维护、页面404
  8. 用HTML和CSS和JS构建跨平台桌面应用程序的开源库Electron的介绍以及搭建HelloWorld
  9. 360极速浏览器进行打印时会带出网页地址问题
  10. git bash、eclipse中git插件提交出现冲突以及解决办法