类对象只在堆或者栈里面创建
构建对象有两种方式方法, 第一: 静态构建 A a 第二: 动态构建 调用
new
类对象只在栈里面创建
如果要在栈里面创建,那么就必须采用静态构建对象的方法,也就是直接调用构造函数
- 禁用
new
运算符 - 将
operator new
和operator delete
设置为私有的
类的对象只在堆里面创建
只在堆里面创建,就是说不能直接调用构造函数,只能调用new
进行对象的创建
- 把类的构造函数设置为私有的
这样会有问题,因为operator new 的操作是先申请内存在调用构造函数,这样一来new就没有办法提供构造了
解决
- 将析构函数设置为私有
如果对象在栈中分配,编译器在分配空间的时候,需要检查析构函数的访问权限,如果把析构函数设置为私有的,则编译器在栈中建立对象的时候会报错,因为对象无法访问析构函数,导致不可以在栈中创建,
这样也是会造成问题的,问题就是,当析构函数是虚函数的时候,子类不可见,无法实现多态
- 最终方案就是,将析构函数设置为protected