我在网上找到了一个想要使用的旧软件包。头文件之一包括以下几行:
#include "gcc_version.h"
#if GCC_VERSION>=3002
#define malloc_alloc __single_client_alloc
#include <ext/algorithm>
#include <ext/memory>
#else
#define __gnu_cxx std
#endif
我的GCC_VERSION是7003,__single_client_alloc
显然早已消失。 single_client_alloc
也已经存在了一段时间,但是我不知道它是否仍然存在,或者如果存在,它仍然位于其中。
看起来似乎唯一实际使用的地方是以下吓人的功能:
void* operator new(size_t s) { return std::malloc_alloc::allocate(s); }
void operator delete(void* p) { std::malloc_alloc::deallocate(p,sizeof(classname)); }
//and in another class
void* operator new(size_t, size_t n) { return std::malloc_alloc::allocate(total_size(n)); }
void operator delete(void* p) { std::malloc_alloc::deallocate((otherclassname*)p,total_size(reinterpret_cast<otherclassname*>(p)->size));}
仅对它们进行注释并恢复为默认的new
和delete
行为是否安全?还是这些除了使代码更节省内存外,还需要做一些实际的事情?
基本上,此代码是否有修复程序,以便它可以在最新的GCC版本下运行?