Wikipedia状态:



删除new运算符类似于在当前C++中将其设为私有(private),但是未明确使用new全局运算符,它避免了特定于类的查找,仍然有效的C++ 0x?

NonNewable *p = ::new NonNewable();
// neither non-portable nor trickery, though perhaps not widely known

我错过了草稿中的某些内容吗?

需要明确的是,这是有效的C++ 03和works fine:
struct NonNewable {
private:
  void *operator new(std::size_t);  // not defined
};

int main() {
  // ignore the leaks, it's just an example

  void *mem = operator new(sizeof(NonNewable));
  NonNewable *p = ::new(mem) NonNewable();

  p = ::new NonNewable();

  return 0;
}

最佳答案

我相信您是对的,维基百科是错误的。 C++ 0x草案标准将“已删除的函数”(8.4p10)描述为不能以任何方式使用(否则程序格式错误)的函数。它们在作用域或名称查找中与正常功能没有任何区别。并且有关新表达的相关段落保持不变:

因此,是的,表达式::new NonNewable [或::new(mem) NonNewable]将选择::operator new的重载,而忽略函数NonNewable::operator new,并且不会使程序格式错误。

关于c++ - C++ 0x是否仍可以使用全局运算符new显式分配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3802454/

10-10 14:19
查看更多