设计一个类,只能在栈上创建对象

本文介绍了两种方法确保C++类的对象只能在栈上创建:1. 将构造函数设为私有并声明拷贝构造函数为私有,通过静态成员函数在栈上创建;2. 屏蔽new操作符来阻止堆上对象的创建,同时要防止定位new的发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一:

  1. 将类的构造函数私有,拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象。
  2. 提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建。
//设计一个类,只能在栈上创建对象
class StackObj
{
public:
	//公有的静态方法创建对象返回即可
	static StackObj getObj()
	{
		return StackObj();
	}
	//构造函数私有
private:
	StackObj()
	{}
};
//全局的,在数据段
StackObj so = StackObj::getObj();
void test()
{
	//new StackObj;
	//拷贝一般在栈上
	StackObj so = StackObj::getObj();
}

方法二: 屏蔽new

  • 因为new在底层调用void* operator new(size_t size)函数,只需将该函数屏蔽掉即可。
    注意:也要防止定位new。
//设计一个类,只能在栈上创建对象
class StackObj
{
public:
	//禁止调用operator new
	void* operator new(size_t n) = delete;
private:
	//或者将operator new私有
	//void* operator new(size_t n);
	//void operator delete(void* p);
};
void test()
{
	//
	//StackObj* ptr = new StackObj;
	StackObj so;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值