day5 cpp:,对象的组织(const对象),

1.对象的组织(类比内置类型)

const对象

const对象只能调用const成员函数和数据成员,除了四大金刚

若成员函数没有加const(void print() const{}),即便里面没有_ix=100修改值,也不能pt2.print()访问,因为是const Point pt2(3,5)--->对象不可修改,但pt2.print()不是const成员函数,即便没修改也可能或者说可以修改

指向对象的指针

Point pt(1,2);

Point *p1=nullptr;

Point*p2=&pt;//p2不需要回收,指向栈上的对象自动回收

Point *p3=new Point(3,4);

delete p3;

|---------|------------------------|------------------------------|
| 需要存储数据时 | 先通过new或malloc分配堆内存 | int* p; *p = 1; ➔ 野指针操作 |
| 指向现有变量时 | 使用取地址符&绑定有效变量 | int* p = &局部变量; ➔ 超出作用域后失效 |
| 指针释放后 | 立即置为nullptr避免误用 | delete ptr;未置空 ➔ 悬垂指针访问 |

Point* p4=new Point();

p4->print();

delete p4;

对象数组

int arr2是未初始化的int型数组,但Point pts2会利用无参构造或参数都是缺省值的有参构造初始化

复制代码
Point pt1(2,6);
Point pt2(5,8);
Point pts[2]={pt1,pt2};
Point pts1[2]={Point(1,2),Point(3,4)};
Point pts2[]={Point(1,2),Point(3,4)};
Point pts3[5]={Point(1,2),Point(3,4)};
//注意:数组里存的是对象的副本

堆对象

复制代码
Point * pt1=new Point(11,12);
pt1->print();
delete pt1;
pt1=nullptr;

Point* pt2=new Point[5]();
pt2->print();
(pt2+1)->print();
delete [] pt2;
pt2=nullptr;

Point* pt3=new Point[3]{{1,2},{6,7},{9,7}};
delete [] pt3;
pt3=nullptr;

2.new/delete表达式的工作步骤(了解)

delete回收步骤:

先调用~Student()回收Jackie空间(数据成员申请的堆空间)

在调用operator delete库函数回收对象stu所在空间

创建对象的探究

创建堆对象的条件

需要公有的operator new,operator delete,构造函数,对析构函数没有要求.

为什么operator delete是私有,不仅delete,而且new也不行了?

虽然operator new还是公有,但若允许创建,却因operator delete是私有的无法delete销毁

为什么将构造函数私有,然后用自定义公有函数实现不行(同栈)?

因为创建对象的过程中就会调用构造函数,而构造函数在private中,这时就卡住了,在public中调用getInstance()函数需要创建完对象后才能使用

为什么将析构函数私有,却可以调用delete表达式?

可以通过自定义公有成员函数,this指针就是本对象的地址,可以实现析构函数和operator delete的功能,从而实现delete,但会有一些问题,如:多次调用void destroy()会出现问题;this指针是nullptr等

创建栈对象的条件

对operator new/operator delete没有要求,需要公有的构造函数,析构函数

为什么对operator new/operator delete没有要求?

因为栈上对象创建不涉及申请指针,不需要使用operator new/delete

为什么将构造函数私有不行(同堆创建)?

因为创建Student stu(101,"Jackie")就要使用构造函数

为什么将析构函数私有不行?

因为栈中对象stu销毁是在test0结束时自动回收,

3.单例模式(重要)

相关推荐
昵称画3 小时前
交接班记录电子化:三班之间的信息不漏
开发语言·数据库·人工智能·低代码·php
“AI国潮设计-小江”3 小时前
【AIGC实战】Python+SDXL批量生成“潮汕英歌舞不倒翁”IP | 角色一致性与多场景融合方案,附完整代码
开发语言·人工智能·python·prompt·aigc
沙蒿同学3 小时前
不引 Ghostscript:我用纯 Go 给 PDF 做了一场「压缩手术」
前端·后端·github
传奇开心果编程3 小时前
【Rust入门练中学】第6课:结构体与方法
开发语言·rust·结构体·编程语言理论·结构体方法·编程通用语言
Linux_cy3 小时前
服务器管理工具哪个好用?我用了七八个
运维·服务器·javascript·python·ssh·面板·gmssh
code tsunami4 小时前
【无标题】
开发语言·python
变与不变8064 小时前
jQuery细节以及使用应用场景
前端·javascript·jquery
CodeGL4 小时前
10、Python基础之进程和线程
开发语言·python
TechWayfarer5 小时前
PHP漏洞被利用,怎么揪出攻击IP?
开发语言·python·tcp/ip·网络安全·php
SailingCoder5 小时前
【封闭结束1】端到端交付:Agent 一次请求如何走完全链路
前端·安全·ai·面试·agent·harness