,请教一个effective c++上的newHandlerSupport的编译有关问题
各位高手,请问一个effective c++上的newHandlerSupport的编译问题
这本书的条款7-8上面说了有关内存管理的问题,我编译了一下,编译不过啊?敢问给为高手怎么回事
newHandlerSupport.h
newHandlerSupport.cpp
testNewHandler.cpp
再次感谢各位高手!!
------解决方案--------------------
因为你用了分离编译。google刘未鹏“为什么C++编译器不支持模板的分离编译”
这本书的条款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; }; #endif
newHandlerSupport.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++编译器不支持模板的分离编译”