我在Stroustrup的书中看到了这一行代码:
一个操作符函数必须是成员函数,或者至少有一个参数是用户定义类型(重新定义new和delete操作符的函数除外)
。但是,operator new
和operator delete
不是需要至少一个用户定义类型的参数吗?这是什么意思呢?我有什么地方理解有误吗?
void *operator new(size_t, my_sandbox &)
肯定是一个重载。但是类成员new
/delete
的搜索路径在重载之外。 - Potatoswatteroperator new:void * operator new(size_t)
。这个似乎违反了引文中的要求。然而这是合法的。 - AnT stands with Russiamy_sandbox
是一个误导。void *operator new(size_t, int)
也是一种重载。此外,“搜索路径”是不恰当的措辞。operator new
在类作用域中查找,使用重载规则,然后落入全局作用域,在那里用户可能有一个替换默认值。我的观点是两者都会发生。顺便问一下,你看到我的回答有什么问题吗? - Potatoswattervoid *operator new(size_t, int)
确实是一个重载。我们可以安全地得出结论,operator new
和operator delete
是“特殊”的。事实上,我记得在SO上争论过这两个东西并不是真正的运算符,而只是使用看起来像运算符重载的语法的特殊函数。 - AnT stands with Russia