首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

,请教一个effective c++上的newHandlerSupport的编译有关问题

2012-04-07 
各位高手,请问一个effective c++上的newHandlerSupport的编译问题这本书的条款7-8上面说了有关内存管理的

各位高手,请问一个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;};#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++编译器不支持模板的分离编译”

热点排行