什么是静态的操作员新意味着什么

时间:2018-02-23 08:47:40

标签: c++

运营商new的静态意味着什么?如果我把它放在头文件中会发生什么?

static void* operator new(size_t size, std::string s)
{
    return 0;
}

int main() 
{
    return 0;
}

此代码在visual studio 2013上编译

但是gcc给出了错误

  

错误:'void * operator new(size_t)'可能未声明   作为静态

     

static void * operator new(size_t size)

clang也是如此

  

错误:'operator new'的静态声明遵循非静态   声明

     

static void * operator new(size_t size)

这是c ++的灰色区域,还是视觉工作室慷慨?

链接到代码:https://www.ideone.com/kZmWgf

1 个答案:

答案 0 :(得分:5)

static对全球operator new毫无用处。 VS C ++编译器很慷慨:void *operator new已经被声明为非静态的,不能第二次声明为静态,GCC和clang会通知你。

static适用于类对象的重载自定义operator new。那里需要static,因为operator new用于分配对象,this在分配后首先可用,换句话说operator new首先返回this指针。 / p>

请注意,根据标准

  

15.5免费商店

     

T类的任何分配函数都是静态成员(即使不是   显式声明静态)。