C++基础学习笔记

1、每个对象在创建时都会自动调用该类的构造函数,试想下,如果构造函数能返回值,但是也无法接收啊,因为创建对象是:类名 对象名; 此时构造函数就自动调用了,有返回值的话怎么将返回值赋值给变量,析构函数没有返回值也同理

2、堆是采用匿名的方式来保存数据的,你只能通过指针来访问这些数据

3、指针可以存放在栈中,较大的数据放在堆中,指针存放堆中数据的地址,nice,栈的速度比堆快,这样也可以减少在堆中产生碎片。注意堆内存由程序员申请和释放,相当于生命周期由程序员控制。但是保存给堆数据地址的指针,却是局部变量,当指针被系统释放后,就没有人知道堆内存数据去哪里找了,导致内存泄露

4、delete关键字将释放指针锁指向的内存,如delete p ,而不会释放指针,所以可以继续使用指针。注意,不能进行两次delete p,因为第一次已经释放了指针指向的内存了,再次删除会崩溃

5、构造函数和类名一致,析构函数在类对象销毁时才会自动执行


6、要分清楚存储在栈中的对象和堆中的对象的区别:

栈中的对象(非new),出了函数作用域就会自动调用析构函数,从而释放掉;

堆中的对象(new出来的),需要程序员主动去释放,不然直到程序结束才会释放


7、this指针的创建和删除由编译器完成,程序员不必操心

8、开辟堆内存空间 p1,delete p1;然后又开辟p2,注意!这时的p2其实指向的是p1,因为p1被释放后又被利用起来了

9、const指针,即常量指针它自身的值是不可改变的,但指向的值可以改变

10、注意函数传参的“按值传递”、“按址传递”、“按别名传递”的区别

11、用已有对象来创建对象时,才会调用复制构造函数;用已有对象来赋值已有对象时,会调用赋值运算符函数


12、只要创建一个类,编译器就会自动添加一下4个函数:

默认构造函数

析构函数

默认复制构造函数

默认赋值运算符函数


13、异常处理接住(catch)抛出来的异常后,可以不处理,继续往外抛(throw);throw and catch使得一些代码被“忽视”,从而不被执行

14、throw可以抛出任何东西,然后catch接收

15、STL六大组件:容器(container)、算法(algorithm)、迭代器(iterator)、仿函数(function object)、适配器(adaptor)、空间配制器(allocator)

16、在C++标准中,STL被组织为下面的13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>、<utility>

猜你喜欢

转载自blog.csdn.net/u011304490/article/details/81151001