C++如何限制对象在堆上或栈上生成
2024-08-31 15:09:42
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的销毁函数给外部用
最新文章
- 用struts实现简单的登录
- css浮动(folat),清除浮动(clear)(另加两种清除浮动方式,总共三种清除浮动方式)
- maven的pom报plugins却是的解决方法(转)
- iOS各种动画效果
- [转]MMORPG服务器架构
- datawindow直接导入导出xml
- C#将汉字转换成全拼的拼音EcanConvertToCh帮助类 (转)
- HDU 5514 Frogs (容斥原理)
- web中使用扫描枪
- 配置tomcat的https通信(单向认证)
- Python 好用得让人发指的函数参数语法糖
- 安卓开发笔记(二十六):Splash实现首页快速开屏功能
- Java设计模式系列-抽象工厂模式
- python之Django学习笔记(二)---Django从工程创建、app创建到表建模在页面的显示
- ELK学习笔记之kibana关闭和进程查找
- XVI Open Cup named after E.V. Pankratiev. GP of Ekaterinburg--I.Iron man
- 大数据入门到精通18--sqoop 导入关系库到hdfs中和hive表中
- USB 驱动(监测鼠标左键的动作)
- topcoder srm 679 div1
- Javascript数据模型