各位高手,请问一个effective c++上的newHandlerSupport的编译问题
这本书的条款7-8上面说了有关内存管理的问题,我编译了一下,编译不过啊?敢问给为高手怎么回事
newHandlerSupport.h
- C/C++ code
#ifndef NEW_HANDLER_SUPPORT_H#define NEW_HANDLER_SUPPORT_H#include <new>using namespace std;template<class T>class newHandlerSupport{ public: static new_handler set_new_handler(new_handler p); static void* operator new(size_t size); private: static new_handler currentHandler;};#endifnewHandlerSupport.cpp
- C/C++ code
#include "newHandlerSupport.h"template<class T>new_handler newHandlerSupport<T>::set_new_handler(new_handler p){ new_handler oldHandler = currentHandler; currentHandler =p; return oldHandler;}template<class T>void * newHandlerSupport<T>::operator new(size_t size){ new_handler globalHandler = std::set_new_handler(currentHandler); void * memory; try { memory = ::operator new(size); } catch (std::bad_alloc&) { std::set_new_handler(globalHandler); throw; } std::set_new_handler(globalHandler); return memory;}template<class T>new_handler newHandlerSupport<T>::currentHandler;testNewHandler.cpp
- C/C++ code
#include <iostream>#include "newHandlerSupport.h"using namespace std;void noMoreMemory( void ){ cout << "err";}class test:public newHandlerSupport<test>{ int aaaa[1000000000]; public: test(){}; ~test(){}};int main(){ //newHandlerSupport<test>::set_new_handler(noMoreMemory);//就是这2行调用啊 //test<int> * x = new test<int>;//我用test *x = new test;也会报错,到底是什么问题呢? return 0;}再次感谢各位高手!!
[解决办法]
因为你用了分离编译。google刘未鹏“为什么C++编译器不支持模板的分离编译”