zoukankan      html  css  js  c++  java
  • 如何让对象只能处于堆中

    more effective C++提出了只能将对象分配在堆中的问题。

    原理1是,让对象被分配时,都是先调用对象中的operator new(size_t size)方法获得原生的内存,然后再调用对象的构造方法。因而可以重载类的operator new方法。但这种方法不能防止程序通过operator new[](size_t size)分配内存。

    实现代码如下:

    //non-heap object
    class A{
    private:
        
    static bool isHeap;
    public:
        
    static class NoHeapException{};
        A(){
            
    if(!isHeap){
                
    throw NoHeapException();
            }
            cout
    <<"heap object"<<endl;
            isHeap
    =false;
        }
        
    static void* operator new(size_t size){
            isHeap
    =true;
            
    return ::operator new(size);
        }
    };
    bool A::isHeap=false;
    int main(){
        A
    * test=new A;
        
    try{
            A();
        }
    catch(A::NoHeapException exc){
            cout
    <<"catch an non-heap object"<<endl;
        }
    }
    在实际中,上述的方法,都是不可行的。
    一般的策略是通过地址空间来判断。但这就依赖于操作系统。一句话,想搞出一个通用的解决方案,这个问题的答案就是:
    没得搞!
  • 相关阅读:
    JMeter做接口测试几个简单实例
    1
    Ubuntu基本命令学习
    commons-codec对字符串进行编码解码
    Python入门学习-DAY15-模块
    Python入门学习-DAY14-生成器,生成器表达式,内置函数,面向过程编程
    Python入门学习-DAY13-迭代器
    Python入门学习-DAY12-递归、三元表达式、列表生成式、字典生成式、匿名函数
    Python入门学习-DAY11-装饰器
    DAY10-Python入门学习-函数的对象与嵌套、名称空间与作用域、闭包函数
  • 原文地址:https://www.cnblogs.com/CUCmehp/p/1376538.html
Copyright © 2011-2022 走看看