参考答案
结论:要定义只能在栈上生成对象的类,核心是将operator new和operator delete设为private或删除(=delete),从而禁止通过new在堆上分配实例。原理:C++中执行new表达式时,编译器先调用operator new分配原始内存,若该函数不可访问或已删除则编译报错;而栈对象由编译器在栈帧自动分配空间并调用构造函数,离开作用域自动析构,不受operator new限制。示例:class StackOnly { private: void* operator new(size_t) = delete; void operator delete(void*) = delete; public: StackOnly() = default; }; 这样StackOnly s;合法,但StackOnly* p = new StackOnly;非法。对比:若要求只能在堆上,则应将析构函数私有化并提供销毁接口。注意嵌套容器等场景也需考虑。