参考答案
将析构函数设为private或protected并提供静态工厂方法,禁止栈上分配。核心要点:栈对象离开作用域需调用析构,若析构私有则编译报错;堆对象由delete显式调用,可在类内静态方法或友元中访问私有析构;也可将构造函数私有,静态方法返回new的对象指针。原理:C++编译器要求栈对象的析构函数可访问,私有化可禁止自动存储期对象。示例:class HeapOnly{ ~HeapOnly()=default; public: static HeapOnly* create(){ return new HeapOnly(); } }; 使用HeapOnly* p=HeapOnly::create(); 删除时需自定义删除器或友元函数调用delete。