【发布时间】:2011-04-17 16:15:23
【问题描述】:
Wikipedia 状态:
可以使用 operator new 使类型无法分配:
struct NonNewable { void *operator new(std::size_t) = delete; };这种类型的对象只能作为堆栈对象或其他类型的成员进行分配。如果没有不可移植的诡计,它就不能直接堆分配。 (由于放置 new 是在用户分配的内存上调用构造函数的唯一方法,并且如上所述已禁止这种使用,因此无法正确构造对象。)
删除 operator new 类似于在当前 C++ 中将其设为私有,但没有显式使用全局 operator 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;
}
【问题讨论】:
-
仅供参考,如果您正在检查:引用的文本已从 Wikipedia 文章中删除。
标签: c++ c++11 new-operator