c++
c++知识总结
Nick_Zhang_123
存储、网络领域bug开发工程师
展开
-
c++二元运算符 ->* 和 .*
->*和.*是两个‘二元运算符’ , 用来操作类成员变量和函数&class::member : 对于member为 nonstatic的变量, 取值后返回的是变量在对象内的偏移位置。对于static的成员变量,返回的是成员地址。 nonstatic和static变量取值都可以直接用*。&class::func : 返回的是成员函数的地址。对于nonstatic函数,通...原创 2019-09-19 14:49:16 · 3566 阅读 · 0 评论 -
c++ new内存分配失败后的new_handler
c++ new内存分配失败后的new_handler1. new_handler/ set_new_handler/get_new_handlerc++使用new分配内存,当operator new无法满足某一内存分配需求时,它会抛出异常,但c++允许在抛出异常前调用一个自定义函数(new_handler),用来给客户自定义指定“内存分配不足”这一行为的处理方式。加入我们自定义函数需要调...原创 2019-08-16 21:26:16 · 451 阅读 · 0 评论 -
c++ new和delete简单探索
c++ new和delete简单探索new 和 delete 工作步骤new:1.使用标准库函数operator new或者operator new[] 分配出一块足够大的内存2. 调用相应的构造函数构造出对象并赋初值,对象安排在步骤1的内存上3. 返回指向这块内存的指针delete:1. 调用对象的析构函数2. 调用标准库函数operator delete或者operator d...原创 2019-09-15 15:04:57 · 162 阅读 · 0 评论 -
c++引用计数实现简单智能指针
原始指针SmartPoint.hclass BaseClass { int x_;public: BaseClass(int x) : x_(x) {}; ~BaseClass() {};};单一类型智能指针实现SmartPoint.h#ifndef SMARTPOINT_BASECLASS_H#define SMARTPOIT_BASECLAS...原创 2019-08-05 21:23:27 · 398 阅读 · 0 评论 -
c++引用计数实现的智能指针循环引用问题
引用计数实现的智能指针循环引用问题什么情况下会出现循环引用?简单来说,就是类A中包含了类B的智能指针对象,类B中包含了包含了类A的智能指针对象; 类A和类B的智能指针实例化SPA和SPB,当各自内部的智能指针都指向对方,这个时候就出现了循环引用。循环引用情况下,实例SPA和SPB的引用计数为2,当各自释放的时候,引用计数减为1,并不会释放A、B的对象实例。// CirCle.hcl...原创 2019-08-06 16:12:47 · 801 阅读 · 0 评论 -
c++智能指针介绍之weak_ptr (&enable_shared_from_this)
c++智能指针介绍之unique_ptrc++11引入,头文件在<memory>,主要是用来协助shared_ptr,不占用引用计数值。特性:弱引用,不占用引用计数值lock/``expired/use_count/opreater=没有重载operater*和operator->use_count: 返回共享对象shared_ptr的引用计数值exp...原创 2019-08-13 09:43:20 · 591 阅读 · 0 评论 -
c++智能指针介绍之shared_ptr
c++智能指针介绍之shared_ptrc++11引入,头文件<memory>, 引用计数实现的智能指针,多个智能指针指向同一资源,累加资源的引用计数。1. 特性1.1 引用计数- 支持赋值,拷贝构造,返回原始指针get,返回引用计数值use_counttemplate< class Y > shared_ptr( const shared_ptr<...原创 2019-08-13 00:34:56 · 191 阅读 · 0 评论 -
c++智能指针介绍之unique_ptr
c++智能指针介绍之unique_ptrc++11引入,头文件在<memory>,单一所有权,用来替换c++98引入的auto_ptr特性:不支持复制赋值左值操作,支持显示的move操作。release, reset, operater=(unique_ptr&& r)// operator=(unque_ptr &&r) 一般用在...原创 2019-08-12 10:42:31 · 816 阅读 · 0 评论 -
c++智能指针介绍之auto_ptr
c++智能指针介绍之auto_ptrc++98: auto_ptr, 包含头文件为<memory>里, c++11 弃用auto_ptr作用及特性:智能指针的引用,主要是为了解决异常发生时产生内存泄漏。auto_ptr在创建的时候获取对象的所有权,在析构的时候,释放对象内存空间(RAII1)。重载了函数的 *和->运算符,使得其操作看起来像个内置指针。没有...原创 2019-08-06 21:24:00 · 291 阅读 · 0 评论 -
c++ friend关键字
c++ friend关键字friend友元,指的是某些普通函数、成员函数、类为了访问指定类中的私有成员,将这些函数或者类用friend关键字修饰并放入到要访问的类中,即可提高原来的访问权限,能访问类中的私有成员。这破坏了被访问类的封装性,不太好,但是有的特定场景下用这种方法使得问题解决起来更加简单,比如之前实现的引用计数智能指针引用计数实现的智能指针类中声明友元称为友元声明,不是函数或...原创 2019-08-14 08:31:41 · 709 阅读 · 0 评论 -
c++引用和指针的区别
引用是个别名,指针是个实体,有自己的地址。引用必须赋初始值,指针不需要。引用被初始值赋值后不能重新绑定新对象,指针可以随时切换指向不同对象。(使用引用的时候不用判空,使用指针的时候需要)引用不能用0来初始化,指针可以初始化为0,表示不指向任何对象。即引用不能为空,指针可以为空。(常引用可以引用常量0)可以有常引用,用来表示引用的对象是个常量,但引用本身不能为常量;指针可以有常指针和指向常量...原创 2019-10-07 13:51:00 · 221 阅读 · 0 评论 -
非const版本调用const版本函数,可以减少代码重复
类中const版本和非const版本函数的实现技巧源自effective c++ 条款3原始实现:Class ClassA {string text;public: const char& operator[](size_t position) const // const版本 { ... 做一些额外的事情 return text[position]; } ch...原创 2019-08-02 21:17:58 · 678 阅读 · 0 评论 -
c++ static修饰变量、函数、对象、数组
文章目录static相关语法一、static 修饰变量修饰局部变量修饰全局变量修饰类中变量内存初始化时机二、static修饰函数修饰普通函数:全局静态函数修饰类中的函数:静态成员函数三、static修饰类对象static相关语法预备知识静态存储区:全局变量和static变量,在静态数据区,内存中所有的字节默认值都是0x00,所以全局变量和static变量的初始值都是0。一、stati...原创 2019-08-03 23:47:15 · 2634 阅读 · 1 评论 -
c++ const & constexpr c++98 c++11 c++14
c++ const 和 constexpr 知识点总结一、const1.const修饰变量const int a = 3;2.const修饰函数const修饰函数参数const修饰函数返回值const修饰函数this指针3.const修饰对象二、constexpr1. constexpr特性和const之间的差异2. constexpr 在c++11中的规范3. const...原创 2019-08-01 21:19:12 · 659 阅读 · 0 评论