c++ - 无法设置新处理程序
问题描述
我正在尝试在 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
我没有声明new
为static
. 这是什么原因以及如何解决??
解决方案
推荐阅读
- c - 尽管在 clion 中包含“linux/uaccess.h”,但函数“put_user”的隐式声明在 C99 中无效
- javascript - 我如何在我的反应应用程序上通过 Axios 从 Imgur 的 API 发出 GET 请求
- reactjs - Github Workflow npm build 在相对路径上失败
- methods - 结构方法的 Rust 生命周期推断
- java - 点击时getIntent()在我的SecondActivity和EXITS上不起作用
- reactjs - 如何使用能够在 React Router 中导航的持久标头组件?
- express - Express.js 应用程序无服务器,使用 Lambda 或函数 - 好主意吗?
- c# - 手动添加时更改 TableLayoutPanel 的颜色
- graphics - 手动转换交换链图像布局
- javascript - Map 方法不断返回一个对象数组,导致 React 出错