类对象只在栈或者堆里面创建

本文探讨了类对象的内存分配,强调了如何通过控制构造函数和析构函数的访问权限来限制对象在栈或堆中的创建。栈上的对象要求使用静态构建方式并确保析构函数的可访问性,而堆对象则需要私有化构造函数。最终解决方案是将析构函数设为protected,以防止栈上创建同时允许多态性。
摘要由CSDN通过智能技术生成

类对象只在堆或者栈里面创建

构建对象有两种方式方法, 第一: 静态构建 A a 第二: 动态构建 调用new

类对象只在栈里面创建

如果要在栈里面创建,那么就必须采用静态构建对象的方法,也就是直接调用构造函数

  • 禁用new运算符
  • operator newoperator delete设置为私有的

类的对象只在堆里面创建

只在堆里面创建,就是说不能直接调用构造函数,只能调用new进行对象的创建

  • 把类的构造函数设置为私有的

这样会有问题,因为operator new 的操作是先申请内存在调用构造函数,这样一来new就没有办法提供构造了

解决

  • 将析构函数设置为私有
如果对象在栈中分配,编译器在分配空间的时候,需要检查析构函数的访问权限,如果把析构函数设置为私有的,则编译器在栈中建立对象的时候会报错,因为对象无法访问析构函数,导致不可以在栈中创建,

这样也是会造成问题的,问题就是,当析构函数是虚函数的时候,子类不可见,无法实现多态

  • 最终方案就是,将析构函数设置为protected
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值