首页 > 解决方案 > 无法设置新处理程序

问题描述

我正在尝试在 C++ 中学习 new_handler 我有以下代码:

#include<iostream>
#include<new>
using namespace std;

class A
{   
    new_handler O_Handler;
    static void NoMem()
    {
        cout<<"No more mem"<<endl;
        throw bad_alloc();
    }

    public: 
    void* operator new(size_t size) throw(bad_alloc)
    {
            cout<<"Custom handler called"<<endl;
            O_Handler=set_new_handler(NoMem);//set for current class
            void *pv=::operator new(size);
            set_new_handler(O_Handler);//restor
            return pv;
    }
    A()
    {
        cout<<"ctor"<<endl;
    }
};
int main()
{
    //cout<A::_cnt;
    try{
        A *a[13];
        for(int i=0;i<13;++i)
            a[i]=new A();
    }
    catch(bad_alloc &e)
    {
        cout<<"Size to large"<<endl;
    }
    return 0;
}

但是我遇到如下编译问题:

F:\prep\c++\overloading_new_operator_set_new_handler.cpp    In static member function 'static void* A::operator new(size_t)':
7   14  F:\prep\c++\overloading_new_operator_set_new_handler.cpp    [Error] invalid use of member 'A::O_Handler' in static member function
19  4   F:\prep\c++\overloading_new_operator_set_new_handler.cpp    [Error] from this location
7   14  F:\prep\c++\overloading_new_operator_set_new_handler.cpp    [Error] invalid use of member 'A::O_Handler' in static member function
21  20  F:\prep\c++\overloading_new_operator_set_new_handler.cpp    [Error] from this location

我没有声明newstatic. 这是什么原因以及如何解决??

标签: c++c++11memory-managementnew-operator

解决方案


推荐阅读