【发布时间】:2012-08-22 11:34:23
【问题描述】:
我正在尝试使用全局参数来实现 operator new。如果没有 args 的 new 重载没有问题,但是在尝试编译时出现以下错误
inline void* operator new(size_t, void* p) {
//...
return p;
}
c:\bjarne_exercise_6.cpp(14): error C2084: function 'void *operator new(size_t,void *) throw()' has a body c:\program files\microsoft visual studio 10.0\vc\include\new(55) :参见之前对“new”的定义
c:\bjarne_exercise_6.cpp(40): error C2264: 'operator new' : 函数定义或声明错误;函数未调用
我刚刚解决了这个问题,你必须在#include stdafx.h 之前声明这个 不,不是真的。它编译得很好,但仍然没有调用这个函数,而是来自新头文件的版本。之所以如此,是因为新标头中已经定义了新位置(带有 2 个参数)。普通的 new (只有 1 个 size_t 参数)只在那里声明,所以你仍然可以重载它。因此,如果您想要具有超过 1 个参数的特殊新参数,则以下 @trion 建议的解决方案是合适的。
【问题讨论】:
-
您有显示此问题的最小/完整程序吗?您的新产品和
main可能会尝试使用它吗? -
你
#include <new>了吗?不要inline。 -
我刚刚解决了这个问题,你必须在你之前声明这个#include stdafx.h
-
但我仍然不清楚为什么 operator new(size_t) 即使在那时也编译得很好,但不是 new(size_t,void*p)。只有后者给出错误,两者都来自
并且在那里声明了 -
@cf16:
void* operator new(size_t);是为数不多的称为“可替换”的特殊函数之一,这意味着您可以定义它,即使实现是其他方式,如果您这样做,将使用您的定义。
标签: c++ operators new-operator