• 如何让对象只能处于堆中


    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;
        }
    }
    在实际中,上述的方法,都是不可行的。
    一般的策略是通过地址空间来判断。但这就依赖于操作系统。一句话,想搞出一个通用的解决方案,这个问题的答案就是:
    没得搞!
  • 相关阅读:
    VS2015 MVC 环境下 MYSQL 数据库应用的环境问题整理。
    outlook2016无法工作
    自动测试用工具
    SUBSTRING的用法问题
    调试常碰到的配置问题杂谈
    IIS7.5配置问题(Win7 Pro,64Bit)
    IIS(SERVER)登陆失败原因调查-(Windows更新KB3161561 )浅谈2
    IIS(SERVER)登陆失败原因调查-(Windows更新KB3161561 )浅谈
    改写.html()获取修改后新修改后的Html-----Js
    前台给后台传数据的方式-----Form表单
  • 原文地址:https://www.cnblogs.com/CUCmehp/p/1376538.html
Copyright © 2020-2023  润新知