如何创建一个类只能在堆(栈)上建立对象

本文介绍了如何在C++中限制类对象的创建方式,确保它们只能在堆或栈上分配。通过将构造函数声明为私有,可以防止静态创建对象,强制使用`new`操作符在堆上创建。同时,析构函数的私有化也能达到类似效果,因为编译器在栈上创建对象时会检查析构函数的可访问性。禁用`operator new()`则可确保对象只能在栈上创建。文章讨论了这两种限制方法的原理和应用场景。
摘要由CSDN通过智能技术生成


  在C++中,类对象的建立方式有两种,一种是静态建立类对象,如A a;另一种是动态建立类对象,如A* p = new A;


这两种方式是有区别的:

    静态建立类对象:是指全局对象,静态对象,以及分配在栈区域内的对象,编译器对它们的内存分配是在编译阶段就完成的,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数。

    动态建立类对象:分配堆区域内的对象,编译器对他们的内存分配是在运行时动态分配的,(使用new运算符将对象建立在堆空间中。这个过程分为两步,第一步,执行operator new()函数,在对中搜索合适的内存并进行分配,第二步,调用构造函数构造对象,初始化这片内存空间。使用这种方法,间接调用类的构造函数。


知道了这些,那么,如何限制类只能在堆上或栈上建立对象呢?


1.只能在堆上建立对象  

    类对象只能建立在堆上,就是不能静态建立对象,即不能直接调用类的构造函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值