堆,栈,RAII
堆:分配内存之后需要手动释放,否则,将要造成内存泄漏
- new和delete操作的是free store
- malloc和free操作的是heap
new的底层就是malloc
动态获取内存都是在堆中进行的
auto ptr = new std::vector()
智能指针
unique_ptr
独享它所指向的指针,也就是说,同时只有一个unique_ptr指向一个对象,不能多个unique_ptr指向一个对象,
如果说unique_ptr被销毁,那么它所指向的对象也会被销毁
不能进行拷贝复制
shared_ptr
共享他们呢所指向的指针,多个shared_ptr可以同时指向一个相同的对象,在计算机内部采用技术机制来实现
如果有对象关联的话,那么引用计数就会+1,如果智能指针减少,那么就会-1,当变成0,贼会将这个对象进行释放
删除器
在构造函数中第二个删除器就行了
两者区别
unique_ptr 占用资源比较小,所以大多数还是用unique_ptr吧
字面量
常量是固定的,在程序执行期间不会改变,这些固定的值,就是字面量
左值和右值
左值:一般指一个特定内存的具有名称的值
右值:不指向稳定内存空间地址的匿名值(不据名对象)
通过取地址来判断左值还是右值:
如果能取到地址 就是左值,否则就是右值
x++和++x
x++:右值:首先生成一个x值的临时拷贝。然后才最x递增,最后返回临时复制内容
++x;左值:直接对x递增后马上返回自身,所以说++x是一个左值
注意:字符串常量存储在程序的数据段中,会在加载的时候开辟内存空间,可以使用&来获取字面两的地址
左值就比较强
如果函数返回的是一个值,return x 那么就会变成 右值
左值引用
传入函数的时候用 void swap(int &a,int &b); 加入
注意: 指针运算的时候会发生计算
文件操作
文件流都在里面
复合
构造函数由内到外,析构函数由外道内,c++会默认进行执行这些代码,我们只要完成其中的函数
如果自己不写的话,那么就要调用默认的构造函数和析构函数
委托
指针,不同步,外边的函数有了,但是里面的函数有可能没有
什么是委托?
但是
继承
构造函数:先先构造自己的父类,然后再构造自己的
析构函数:先执行父类的析构函数,然后再析构自己
虚函数
non-virtual:不希望子类重新定义他
virtual:希望子类能够重新定义他
pure virtual:希望子类一定要重新定义他
[code]#include class CDocument{private:public: void on_file_open() { std::cout |