C++类创建普通对象与类创建指针对象的区别

提要:

1.0 类创建普通对象,省略。
2.0 类创建指针对象:
2.0.1 如果只是调用静态函数,可以不用初始化。但是调用静态函数,类名就可以直接调用,所以说,定义用类定义指针对象而不初始化,就是耍流氓,不要这么做。
2.0.2 类创建指针对象后,最好的方法是:

2.0.2.1 在这之前,先用类创建一个实例:即先创建一个普通对象。
2.0.2.2 然后用指针对象去使用它,我想,这也是指针存在的意义。--- 这就是指针创建出来的本意。-高效,但充满风险。

文中有许多我不解的地方,如果有知道的大佬,一定要帮忙解答一下,先行谢过。

一、虚拟内存的定义:(来自百度百科)
https://baike.baidu.com/item/%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98/101812

二:

class Cube{
private:
	Cube()
	
};

三、结果:
1.0 这里可以看到,使用类建立的指针对象,在没有为对象分配内存的情况下,指向随机,相当于根本没有创建这个对象,连对象的构造函数、析构函数都没有调用
【注】将指针对象初始化为nullptr 和这个是一样的,没有创建对象,只是创建了一个指针类型的变量。
在这里插入图片描述
2.0 指针对象调用普通函数:下图: 结果是:出错,显示没有初始化指针。

// 使用 内嵌作用域 测试
	cout << "进入内嵌作用域: " << endl;
	{
		Cube* Cptr;
		cout << Cptr->GetS() << endl;
	}

3.0 指针对象调用static 函数(是可以的,因为staticMember 不依赖对象而存在,在静态区)
在这里插入图片描述
总结2.0,3.0: 你可以创建对象指针而不初始化,没有初始化的对象指针,无法执行普通的函数操作,只能执行静态函数(目前测试)

4.0 定义指针对象,并分配了内存,但是没有初始化对象, 返回的S值是乱码
【注】这里只进入Cube的构造函数,但是没有进入Cube的析构函数,这是为什么呢?对象一旦构建,构造函数和析构函数不是必须执行的吗??是因为内存泄漏吗?还是说没有初始化,数据跑偏了?

	// 测试正常的;
		Cube* Cptr3 = new Cube;
		cout << Cptr3->GetS() << endl;;

在这里插入图片描述
4.0.2
【注】在构造函数中初始化数据,显示结果正常,但是执行了构造函数,没有执行析构函数!
在这里插入图片描述

这种情况该如何初始化呢?

【注】这一种,数据显示正常,处理正常,但是没有进入析构函数!!
1.0 : 在构造函数中, 添加默认值;

推荐第二种:
2.0 : Cube obj1{1.0,2.0};
Cube* Cptr = &obj1;
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值