C++中自C++11引入了智能指针,很大程度上能够避免使用裸指针。智能指针实质就是重载了->和*操作符的类,由类来实现对内存的管理,确保即使有异常产生,也可以通过智能指针类的析构函数完成内存的释放。 shared_ptr 同时记录对象被引用的次数,当引用次数为 0 的时候,也就是最后一个指向该对象的共享指针析构的时候,共...
57.四种cast,智能指针 四类cast转换static_cast静态类型转换:1、void* 转换为任意类型的指针 2、任意类型的指针转换为void* 3、编译器允许的跨类型转换,比如char类型转换为int类型,double转int型 4、做基类与派生类的转换,派生类转换成基类是安全的,基类转换成派生类是不安全的,因为往往子类的内容比父类多。stati...
多次释放内存:智能指针是一个类类型(class type),它具有重载的”->”和”*”操作符以表现得像指针。比起原始指针,智能指针往往是一种更安全的选择,因为它们可以提供原始指针中不存在的增强行为,如垃圾回收、检查空,而且防止使用在特定情况下不合适或危险的原始指针操作(如指针算术和指针复制)。引用计数智能指针对它...
智能指针是一个类,这个类的构造函数中传入一个普通指针,析构函数中释放传入的指针。智能指针的类都是栈上的对象,所以当函数(或程序)结束时会自动被释放。 (注:不能将指针直接赋值给一个智能指针,一个是类,一个是指针。) 常用的智能指针:智能指针在C++11版本之后提供,包含在头文件中,主要是shared_ptr、unique...
1)智能指针概念:智能指针是封装了指针、及构造函数、析构函数的类。 2)使用智能指针原因:管理指针,防止内存泄漏;当超出该对象的作用域时,类会自动调用析构函数,释放资源; 3)auto_ptr 与 share_ptr 的区别: 3-1)auto_ptr 采用所有权模式,若 p2 = p1,则 p1 所有权会被剥夺,此时 p1 变为野指针; ...
空类占用一个字节 虚函数占用一个指针空间 子类大小等于父类大小+子类成员大小 静态成员不占用类大小,在堆区 函数成员不占用大小 3. -= *= /= += 右结合性,先算右边 ps:n *= 5 + 6; 先算5+ 6 再算 * 4. int n[3] = { 1,4,8 }; ...
P58802_C++基础课程_day05_8 自定义智能指针_rec. 18:23 P58902_C++基础课程_day05_9 自定义的string类1_rec. 10:20 P59002_C++基础课程_day05_10 自定义的string类2_rec. 14:17 P59102_C++基础课程_day05_11 自定义的string类3_rec. 18:43 P59202_C++基础课程_day05_12 今日回顾和作业_rec. 03...
C++作为一门在C和Java之间的语言,其既可以使用C语言中的高效指针,又继承了Java中的面向对象编程思想,在去年编程语言排行榜上更是首次超过Java,进入前三。 前面已经使用一篇文章讲解了C++中的指针:【重学C/C++系列(三)】:这一次彻底搞懂指针和引用 今天这篇文章就来讲解下C++中的面向对象编程思想。说到面向对象编...
考虑一个典型情况:类 Derived 是类 Base 的派生类,希望这样赋值:”Base* pb; Derived pd;pb = pd;“你倒说说看,这种情况,怎样改用上面这个智能指针来处理?”“”,zero 沉默了。“要实现一个完整的收集机制并不容易,因为有许多细节要考虑。”,Solmyr开始总结了,“不过,基本思路就是上面说的这些。值得庆幸的...
4)类内的static成员变量属于整个类所拥有,不能在类内进行定义,只能在类的作用域内进行定义 5)类内的static成员函数属于整个类所拥有,不能包含this指针,只能调用static成员函数 static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?