赞
踩
一个对象可以创建在栈上,堆上,全局区
假设有一个Date类
Date d1; //静态创建一个对象
Date *d2=new Date; //动态创建一个对象
Date d1;//正常创建
Date d3(d1);//通过拷贝构造
Date *d2=new Date;
std::Date d4;
static Date d5;
如果只能在栈上创建对象,就要将其他几种方式屏蔽。所以我们要将创建对象的方式固定为只能在栈上,并且其余方式不能创建对象,这些创建对象的方式都有一个共同的地方就是调构造,如果我们将构造函数私有化,只有通过特定的函数才能调用,那其他所有方式都无法创建对象。
new 在底层通过调用opertor new 和 构造,operator new 用于开空间,所以将operator new 私有,new将无法创建
断绝了所有创建方式,只能通过特定的函数创建对象
为什么要是静态的?
因为类中的函数必须要通过一个对象进行调用,但是我们此时没有对象,要创建一个对象,所以只能将该函数声明成静态的,在类外直接访问。
具体如下:
1 #include <iostream>
2 using namespace std;
3 //只能在栈上为对象开辟空间,不能使用new
4 class InStack{
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。