如何限制一个类对象只在堆(栈)上分配空间?

本文探讨了如何限制C++类对象只能在堆或栈上分配空间。对于只在堆上分配,简单设置构造函数为私有会导致无法通过new创建对象;而在栈上分配,可通过将析构函数设为私有并重载new和delete为私有来实现。
摘要由CSDN通过智能技术生成

标题是曾经看到过的一个小问题,当时想法简单也没有实际操作,最近在网上搜了一搜关于这个问题的一些博客,自己总结一下问题的实际操作以及操作产生的问题(堆栈就不详述了,标题可以理解:“如何限制一个类对象只可以new(直接声明)?”)。

1、如何限制一个类对象只在堆上分配空间?
限制一个类对象只在堆上分配空间,即这个对象只可以new出来,却不可以直接声明出来。我们都知道在new的时候其实执行是分两个步骤,首先是调用operator new()函数,在堆中申请类大小的内存,其次就是调用类的构造函数。如果我们简单粗暴地将构造函数设置为私有成员,我们在无法直接声明对象的同时也无法通过new来创建对象,故这种方法不可以。
当对象建立在栈上面,是由编译器分配内存空间,调用类的构造函数的,当对象“生命”结束的时候,也是由编译器来进行资源回收,调用类的析构函数。也就是说这个对象的整个生命周期都是编译器掌握的。那么如果编译器无法调用析构函数会发生什么情况呢?我们创建一个类,并将类析构函数权限设置为私有,在程序中直接声明一个对象看看结果如何。

class A
{
private:
    ~A(){}
};
int main()
{
    A a;//无法通过编译
    return 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值