1

我在网上找到了一个我想使用的旧包。其中一个头文件包括以下几行:

#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也存在了一段时间,但我不知道它是否仍然存在,或者如果存在,它存在于哪个标题中。

看起来唯一实际使用 this 的地方是以下看起来很吓人的函数:

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));}

仅评论它们并恢复为默认值newdelete行为是否安全?或者这些是否在做一些超出使代码更节省内存的事情,在这种情况下我需要一个实际的修复?

基本上,是否有对此代码的修复,以便它可以在最新的 GCC 版本下工作?

4

0 回答 0