实现只在栈上创建对象的类
- 满足条件:
只能在栈上创建对象,即不能在堆上创建对象,因此将new的功能屏蔽掉即可,即屏蔽掉operator new和定位new表达式,注意:屏蔽了operator new,实际也将定位new屏蔽掉。
#include<iostream>
using namespace std;
class Stack{
public:
static Stack getStack(){
return Stack();
}
//void *operator new(size_t n) = delete;
//void operator delete(void *p) = delete;
private:
Stack(){
}
void *operator new(size_t n);
void operator delete(void *p);
};
int main(){
Stack stack = Stack::getStack();
Stack stack1(stack);
//Stack stack3 = new Stack;
//将new的路径删除,或者只声明不实现。
return 0;
}
实现只能在栈上创建对象的类,需要将new的功能彻底 “堵住” ,既实现重载的 operator new (将其设置为只声明不实现或者delete形式都可以实现该功能),
【总结】
- 方法一
- 1.构造函数私有化,间接阻止new 关键字的执行逻辑
- 2.构造公共接口:在栈上创建对象
- 3.在类外面无法创建对象,函数用类名调用,公共接口必须为static接口
- 方法二
- 1.重载operator new 函数,申明成私有的,并且不实现
- 2.构造函数公有