Skip to main content

Language

如何定义一个只能在堆上(栈上)生成对象的类?

只能在堆上:将析构函数设置为私有,C++ 是静态绑定语言,编译器管理栈上对象的生命周期,编译器在为类对象分配栈空间时,会先检查类的析构函数的访问性。若析构函数不可访问,则不能在栈上创建对象。

只能在栈上:在堆上生成对象,使用 new 关键字,分为两个阶段,第一阶段,在堆上寻找可用内存,分配给对象,第二阶段,调用构造函数生成对象。因此,将 new 关键字设置为私有,那么第一阶段就无法完成。

https://interview.huihut.com/#/?id=%e5%bc%95%e7%94%a8