operator new已经有了一个正文

4pi*_*ie0 4 c++ operators new-operator

我正在尝试使用参数作为全局实现operator new.如果没有args的new被重载没有问题,但是在尝试编译时我遇到了以下错误

inline void* operator new(size_t, void* p) {
    //...
    return p;
}
Run Code Online (Sandbox Code Playgroud)

c:\ bjarne_exercise_6.cpp(14):错误C2084:函数'void*operator new(size_t,void*)throw()'已经有一个正文c:\ program files\microsoft visual studio 10.0\vc\include \new( 55):看看'new'的先前定义

c:\ bjarne_exercise_6.cpp(40):错误C2264:'operator new':函数定义或声明中的错误; 功能未被调用

我刚刚解决了这个问题,你必须在#include stdafx.h之前声明这个.不,不是真的.它编译得很好,但仍然没有调用此函数,但是来自新头文件的版本.是这样,因为新标题中已经定义了新的(有2个参数).普通的new(只有1,size_t参数)只在那里声明,所以你仍然可以重载它.因此,如果你想要带有多个参数的特殊new,下面的@trion建议的解决方案是合适的.

Luc*_*ton 5

这种放置形式operator new(如标准所称)已在全局命名空间的C++程序中定义,您无法自己提供定义.与其他全球operator news 不同,这个不可替换.