禁止堆对象
来源:互联网 发布:云南大学软件学院导师 编辑:程序博客网 时间:2024/05/17 06:15
对象,你可以这样编写:
private:
static void *operator new(size_t size);
static void operator delete(void *ptr);
...
};
UPNumber n1; // okay
static UPNumber n2; // also okay
UPNumber *p = new UPNumber; // error! attempt to call
// private operator new
有趣的是,把operator new声明为private经常会阻碍UPNumber对象做为一个位于堆
中的派生类对象的基类被实例化。因为operator new和operator delete是自动继承的,如果operator new和operator delete没有在派生类中被声明为public(进行改写,overwrite),它们就会继承基类中private的版本,如下所示:
class UPNumber { ... }; // 同上
class NonNegativeUPNumber: //假设这个类
public UPNumber { //没有声明operator new
...
};
NonNegativeUPNumber n1; // 正确
static NonNegativeUPNumber n2; // 也正确
NonNegativeUPNumber *p = // 错误! 试图调用
new NonNegativeUPNumber; // private operator new
如果派生类声明它自己的operator new, 当在堆中分配派生对象时, 就会调用这个函数,于是得另找一种不同的方法来防止UPNumber基类的分配问题。UPNumber的operator new是private这一点,不会对包含UPNumber成员对象的对象的分配产生任何影响:
class Asset {
public:
Asset(int initValue);
...
private:
UPNumber value;
};
Asset *pa = new Asset(100); // 正确, 调用
// Asset::operator new 或
// ::operator new, 不是
// UPNumber::operator new
- 禁止堆对象
- 禁止产生堆对象VS禁止产生栈对象
- 禁止产生栈对象;禁止产生堆对象
- 堆对象的建立与禁止
- C++中禁止产生非堆对象
- C++内存对象大会战 禁止产生堆对象 禁止产生栈对象
- C++内存对象大会战 禁止产生堆对象 禁止产生栈对象
- 要求或禁止在堆中产生对象
- 要求或禁止在堆中产生对象
- 要求或禁止在堆中产生对象
- 禁止或要求对象产生于堆中
- 要求或禁止在堆中产生对象
- 要求或禁止在堆中产生对象
- java/c++禁止产生堆/栈对象及其他
- 控制对象的创建方式(禁止创建栈对象or堆对象)和创建的数量
- 13.如何做到要求或禁止在堆中产生你自定义的对象
- More Effective C++----(27)要求或禁止在堆中产生对象
- 堆对象
- PHPLog php 程序调试追踪工具
- Java虚拟机学习----垃圾收集算法
- Mybatis动态SQL
- iOS测试系列】instruments工具的使用(一)- 通过leaks分析内存泄露
- extjs4多行选中
- 禁止堆对象
- Android中不能静态注册的广播
- Android N上语言列表
- 01-redis学习第一章
- 代码质量之命名(一)[部分看来的部分自己感悟]
- Http响应案例、Http响应编码问题、Servlet项目编码问题总结图
- 初学swift_002
- 记一次写Java项目启动管理脚本
- ROS进二阶学习笔记(2)- SMACH:用状态机来管理机器人任务