实现只在栈上创建对象的类

实现只在栈上创建对象的类

  • 满足条件:

只能在栈上创建对象,即不能在堆上创建对象,因此将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.构造函数公有
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值