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;
        }
    }
    在实际中,上述的方法,都是不可行的。
    一般的策略是通过地址空间来判断。但这就依赖于操作系统。一句话,想搞出一个通用的解决方案,这个问题的答案就是:
    没得搞!
  • 相关阅读:
    Day 19
    Day 18
    Day17
    Day 16
    正则表达式(仅可输入中文英文数字以及英文逗号)
    Linux安装Nginx 并搭建图片服务器
    Mysql创建用户表并利用存储过程添加100万条随机用户数据
    Dubbo(高性能、轻量级的开源Java RPC框架) & RPC(远程过程调用)
    Redis
    OSI (开放系统互联(Open System Interconnection))
  • 原文地址:https://www.cnblogs.com/CUCmehp/p/1376538.html
Copyright © 2011-2022 走看看