当前位置:   article > 正文

实现一个类只能在栈上或堆上创建对象_创建一个对象 是在栈里吗

创建一个对象 是在栈里吗
实现一个类只能在栈上创建对象

一个对象可以创建在栈上,堆上,全局区

创建对象的两种方式:

假设有一个Date类

Date d1;  //静态创建一个对象
Date *d2=new Date;  //动态创建一个对象
  • 1
  • 2
创建在栈上的对象
Date d1;//正常创建
Date d3(d1);//通过拷贝构造
  • 1
  • 2
创建在堆上的
Date *d2=new Date;
  • 1
创建在全局区和静态区
std::Date d4;
static Date d5;
  • 1
  • 2

如果只能在栈上创建对象,就要将其他几种方式屏蔽。所以我们要将创建对象的方式固定为只能在栈上,并且其余方式不能创建对象,这些创建对象的方式都有一个共同的地方就是调构造,如果我们将构造函数私有化,只有通过特定的函数才能调用,那其他所有方式都无法创建对象。

new 在底层通过调用opertor new 和 构造,operator new 用于开空间,所以将operator new 私有,new将无法创建

  • 构造函数私有化

断绝了所有创建方式,只能通过特定的函数创建对象

  • 定义一个静态的获得对象的函数

为什么要是静态的?
因为类中的函数必须要通过一个对象进行调用,但是我们此时没有对象,要创建一个对象,所以只能将该函数声明成静态的,在类外直接访问。

具体如下:

    1 #include <iostream>                                                      
  2 using namespace std;                                                     
  3 //只能在栈上为对象开辟空间,不能使用new                                   
  4 class InStack{                                                     
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/244318
推荐阅读
相关标签
  

闽ICP备14008679号