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


    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;
        }
    }
    在实际中,上述的方法,都是不可行的。
    一般的策略是通过地址空间来判断。但这就依赖于操作系统。一句话,想搞出一个通用的解决方案,这个问题的答案就是:
    没得搞!
  • 相关阅读:
    【彩彩只能变身队】(迟到的)团队介绍
    【彩彩只能变身队】用户需求分析(二)—— 调查结果
    【彩彩只能变身队】用户需求分析(一)—— 调查问卷
    C语言I博客作业04
    C语言I博客作业06
    c语言1作业07
    C语言I博客作业03
    C语言I博客作业02
    C语言I博客作业05
    【OpenGL编程指南】之投影和视口变换
  • 原文地址:https://www.cnblogs.com/CUCmehp/p/1376538.html
Copyright © 2020-2023  润新知