
c++
文章平均质量分 74
spigcoder
这个作者很懒,什么都没留下…
展开
-
RAII和智能指针的实现
借此,我们实际上把管理一份资源的责任托管给了一个对象。原创 2024-08-06 17:16:19 · 444 阅读 · 0 评论 -
c++异常详解
实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家 随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了// 服务器开发中通常使用的异常继承体系public:{}protected:int _id;public:{}原创 2024-08-02 11:08:09 · 631 阅读 · 0 评论 -
c++function bind包装器详解
对于一个ret = func(x),我们并不知道func是什么,func可能是函数指针,也可能是函数名,仿函数,lambda表达式,所以这些都是可调用的类型,这样就会导致模板的效率低下,就如同我刚写的代码,count的地址是不一样的,这就是说函数模板实例化出来了多份,而包装器就可以很好的解决这个问题。原创 2024-08-01 09:27:33 · 872 阅读 · 0 评论 -
c++可变参数模板
上面的参数args前面有省略号,所以它就是一个可变模版参数,我们把带省略号的参数称为“参数包”,它里面包含了0到N(N>=0)个模版参数。我们无法直接获取参数包args中的每个参数的, 只能通过展开参数包的方式来获取参数包中的每个参数,这是使用可变模版参数的一个主要特 点,也是最大的难点,即如何展开可变模版参数。由于语法不支持使用args[i]这样方式获取可变 参数,所以我们的用一些奇招来一一获取参数包的值。原创 2024-07-31 08:57:18 · 405 阅读 · 0 评论 -
c++11类的新功能
如果你没有自己实现移动赋值重载函数,且没有实现析构函数 、拷贝构造、拷贝赋值重载中 的任意一个,那么编译器会自动生成一个默认移动赋值。默认生成的移动构造函数,对于内 置类型成员会执行逐成员按字节拷贝,自定义类型成员,则需要看这个成员是否实现移动赋 值,如果实现了就调用移动赋值,没有实现就调用拷贝赋值。(默认移动赋值跟上面移动构造 完全类似)如果你提供了移动构造或者移动赋值,编译器不会自动提供拷贝构造和拷贝赋值。原创 2024-07-30 08:28:38 · 434 阅读 · 0 评论 -
c++完美转发
因为这里我没有写左值引用的Insert,这里如果没有进行完美转发的话,PushBack和PushFront就会调用左值的Insert,从而会进行深拷贝,这样的效率并不是很高。关于右值引用与移动构造请看这里。原创 2024-07-30 08:26:50 · 376 阅读 · 0 评论 -
右值引用与移动构造详解
可能可以对它赋值,左值可以出现赋值符号的左边,右值不能出现在赋值符号左边。也是一个表示数据的表达式,如:字面常量、表达式返回值,函数返回值(这个不能是左值引 用返回)等等,右值可以出现在赋值符号的右边,但是不能出现出现在赋值符号的左边,右值不能 取地址。->如果返回的是一个局部作用域的对象就不能使用引用返回,但是使用传值返回的话就会进行一份深拷贝,这对于追求极值性能的c++来说不是很可取,所以因右值引用而产生的移动构造就起了作用,它可以很好的解决传值返回深拷贝的问题。如果没有移动构造的话,结果是这样的。原创 2024-07-29 09:55:22 · 561 阅读 · 1 评论 -
c++17
是C++17中引入的一个类模板,它允许在变量中存储值或不存储值,这类似于其他编程语言中的 “可选类型” 或 “空安全类型”。c++17之前只有内联函数,现在还有内联变量 -> 使得c++类中的静态成员变量在头文件中可以进行初始化操作。主要用于表示一个变量可能有值,也可能没有值的情况,从而避免了使用特殊值或指针来表示缺失的值。c++17之前的if语句不可以在if()中对变量进行初始化,但是c++17之后可以。使用结构化绑定,可以帮助我们更好的使用结构里面的值。包含一个值,可以使用。原创 2024-07-25 08:55:37 · 451 阅读 · 0 评论 -
c++14新特性
c++14相比于c++11增加了很多新的特性,我在这里举几个我认为比较有用的讲解一下。原创 2024-07-24 09:50:47 · 348 阅读 · 1 评论 -
c++红黑树插入实现
RED,BLACK:_kv(kv),_col(RED),{}同样的三叉链结构,只是将AVLTree的bt变成col这里新插入的节点的默认颜色是红色 -> 因为如果是黑色,那么每插入一个新的节点都会破坏性质4,但是如果新插入的节点是红色节点则有可能会破坏性质3,有可能不破坏。原创 2024-07-23 21:10:00 · 293 阅读 · 0 评论 -
c++11智能指针
shared_ptr还提供了一些类成员函数,其中get()可以获得shared_ptr所包含的原生指针,reset如果没有实参,会将当前调用对象的对内存引用计数-1,同时将当前对象置为空指针,如果有对象,将当前shared_ptr指向参数,并将原始空间的智能指针-1,use_count()获得当前shared_ptr的引用计数, operator*()可以获得当前指针指向的数据, 其余函数请参考官方文档了解详情。同样,当 weak_ptr 指针被释放时,之前所指堆内存的引用计数也不会因此而减 1。原创 2024-07-23 09:53:54 · 1069 阅读 · 1 评论