C++如何让类对象只能在堆(栈)上分配空间
一般情况下写一个类都是可以采用new在堆上分配空间,或直接采用 类名+对象名 的方式在栈上分配空间。但有时候,如果想让一个类只能在栈上或者堆上分配空间,又该怎么实现呢?
下面分别来介绍如何定义只能在栈上或堆上实例化的类。
注:
1.静态实例化对象 如 A a;的步骤为:先由编译器为对象在栈空间分配内存,移动栈顶指针,挪出适当的空间,然后在这个空间上调用构造函数形成一个对象,在对象使用完之后,调用析构函数回收内存,栈顶指针减一。
2.动态实例化对象:new操作符,第一步执行operator new()函数在堆上分配一个内存,然后调用构造函数初始化这片空间。
1.只能在栈上分配类对象
只有使用new运算符,对象才会建立在堆上,因此要禁用new运算符才能只在栈上分配空间。但new操作符是C++内建的,所以必须要先认清一个事实即:new operator总是先调用operator new,所以我们只要堆new操作符进行重载,并将它声明为private的,就能保证不能再使用new实例化对象,如:
class A{
private:
void* operator