每日一言
每一次自我突破,都是对平庸生活的宣战。
this关键字
This是什么意思呢,有什么作用呢?
首先看到代码部分,我们的person(string name ,int age ,int year)这个是一个构造函数,这个没有问题吧,但是我们会知道如果我的构造函数的参数和我们类中的数据参数名字一样了怎么办,现实是我们的编译器会报错,那么,这个问题怎么解决呢,我们这边有个叫做this关键字的this就是此时我们这个对象的指针,那么我们可以通过this->name=name 这样就不会造成name =name这样的尴尬场面了,
这个是为了证明this是不是与当前对象的地址是不是一致,因为官方的解释是this就是代表了当前对象的地址值,那么我们可以在构造函数那边打印this和对象创建后输出对象的地址值进行对比,那么发现确实是这样
那么,我们的this关键字还有什么用呢?
我们这边有一个这样的写法
p1.setValue(2090).display();
会发现怎么连续的调用了?
什么意思呢,就是setValue这个函数是这样的我们通过这个函数改变year的值然后这个函数的返回值我们设置为引用类型,所以这个return *this 的意思就是返回当前对象的引用(*this是当前对象,返回值为引用 说明返回的是对象的引用),那么我们因为是返回了当前对象的引用,所以我们用这个特性(还是这个对象)继续调用display,这个就叫做链式调用
如果需要链式调用操作同一对象,setValue必须返回引用(Car&),确保所有操作作用于原对象。
也就是setValue(2090) 实际上可以看作是 对象的引用,那么我们可以利用这个对象的引用继续调用函数
new关键字
这个new关键词我们已经很熟悉了
比如 car * BMW =new car();
是什么意思呢?就是在堆空间开辟一个car类的空间大小,系统会在堆这个 “存储区域” 里找一块连续的、足够放下 Car 类对象所有成员变量的内存空间,而这整块空间的第一个字节对应的内存编号,就是所谓的堆内存首地址 。然后将首地址赋值给BMW这个指针变量,我们这个对象是在堆上创建的
如果是car BMW;那么这个对象是栈上创建的,那么
栈空间创建的对象会随着作用域的结束自动销毁,这是 C++ 为了方便程序员管理内存、减少出错风险而设计的机制,和堆对象的手动销毁形成了鲜明对比,合理利用栈对象和堆对象的特性,能让程序的内存管理更加高效和安全。
那么也就是如果我main函数里面创建了一个对象,那么我这个面函数就是代码执行到 main 函数最底下 return 的时候,那么这个对象就自动销毁了。
delete关键字
这个很简单,带过一下就好,意思就是我们使用指针的话需要我们自己分配内存,那么这个内存的话是在堆内存;里面进行申请的,我们要知道堆内存是长期存储内存,如果不去手动释放内存的话就会一直保留着
为什么需要 delete?
堆内存由程序员完全控制,若不 delete:
- 内存会一直占用,直到程序结束(内存泄漏)。
- 长期运行的程序(如服务器)会因内存耗尽而崩溃。