- 博客(19)
- 资源 (3)
- 收藏
- 关注
转载 C++ lambda函数
来源:https://blog.csdn.net/WizardtoH/article/details/81185012lambda函数lambda函数是什么?还是直接看代码比较容易理解:int main(){ int a = 1; int b = 2; // 定义一个lambda函数 auto sum = [](int x, int y)->int{ return x + y; }; std::cout << sum
2020-08-06 21:42:25 1837
转载 C++右值引用:移动语义和完美转发
来源:https://blog.csdn.net/WizardtoH/article/details/80718605指针成员和拷贝构造当一个类中含有指针成员时,由于默认的拷贝构造函数只会进行浅拷贝,所以当我们写出以下代码时:class Base{public: Base():data(new int(0)){} //Base(const Base& base): data(base.data){} 默认的拷贝构造 ~Base() { std
2020-08-06 17:12:42 295
转载 IO多路复用机制
来源:https://blog.csdn.net/baixiaoshi/article/details/48708347服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:(1)同步阻塞IO(Blocking IO):即传统的IO模型。(2)同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(New IO)库。(3)IO多路复用(IO Multiplexing):
2020-08-05 22:16:23 217
转载 linux环境内存分配原理
来源:https://www.cnblogs.com/dongzhiquan/p/5621906.htmlLinux 虚拟地址空间如何分布?malloc和free是如何分配和释放内存?如何查看堆内内存的碎片情况?既然堆内内存brk和sbrk不能直接释放,为什么不全部使用 mmap 来分配,munmap直接释放呢 ?Linux 的虚拟内存管理有几个关键概念:1、每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址;2、虚拟地址可通过每个进程上的页表(在每个进程的内核虚拟地址空间)与物
2020-08-04 21:50:36 404
转载 一个C++源文件从文本到可执行文件经历的过程
来源:https://blog.csdn.net/daaikuaichuan/article/details/89060957以我们最初学到的“hello world”程序为例。这个程序在编译中是这样进行的,首先执行g++ helloworld.cpp命令得到a.out文件;执行./a.out命令就可以输出hello world!事实上执行g++ helloworld.cpp可以分为四个步骤,分别是预处理,编译,汇编,和链接,这就像一个被隐藏的过程,使用者可以通过简单的命令即可完成复杂的步骤。预处理(
2020-08-04 10:31:20 488
转载 set、map的使用及其特性和区别
原文:https://blog.csdn.net/ETalien_/article/details/89439892STL总共实现了两种不同结构的管理式容器:树型结构与哈希结构。树型结构的关联式容器主要有四种:set,map,multiset,multimap。下面介绍一下这四种容器的简单使用。1.setset里面每个元素只存有一个key值,它支持高效的关键字查询操作,比如检查一个关键字是否在set中。如果这个key值之前存在的话就不插入。简单使用如下:插入:set<int> s;
2020-08-03 20:28:02 927
转载 C++ make_shared
来源:https://www.jianshu.com/p/03eea8262c11make_shared的使用:shared_ptr<string> p1 = make_shared<string>(10, '9'); shared_ptr<string> p2 = make_shared<string>("hello"); shared_ptr<string> p3 = make_shared<string>(); 尽
2020-08-03 17:01:21 209
原创 share_ptr和weak_ptr的核心实现
weakptr的作为弱引用指针,其实现依赖于counter的计数器类和share_ptr的赋值,构造,所以先把counter和share_ptr简单实现Counter简单实现class Counter{public: Counter() : s(0), w(0){}; int s; //share_ptr的引用计数 int w; //weak_ptr的引用计数};counter对象的目地就是用来申请一个块内存来存引用基数,s是share_ptr的引用计数,w是weak_
2020-07-31 16:51:41 458
原创 share_ptr交叉引用导致的内存泄露问题
我们先来看一段代码:#include<iostream>using namespace std;class B; //声明class A{public: shared_ptr<B> pb_; ~A() { cout << "A delete\n"; }};class B{public: shared_ptr<A> pa_; ~B() { cout << "B delete\n"; }};void
2020-07-31 11:00:30 555
转载 C++智能指针
来源:https://www.cnblogs.com/greatverve/p/smart-ptr.html先看一段代码,然后我们将分析各种智能指针的基本用法。#include <boost/shared_ptr.hpp>class CBase: public boost::enable_shared_from_this<CBase> // 一个与shared_ptr相关的模板类{public:virtual void f(){}//必须有个虚函数才能向上向下转换。}
2020-07-30 11:23:45 117
转载 explicit关键字
来源:https://www.cnblogs.com/Braveliu/archive/2012/12/30/2840055.htmlexplicit如何使用?以及作用?举例说明如下:加关键字explicit。无法实现隐式转换。示例代码如下:#include <iostream>using namespace std;class Test{public: explicit Test(int x = 0); // 关键字explicit的标准位置 void operato
2020-07-29 16:20:58 108
转载 强制类型转换(const_cast)
来源:https://www.cnblogs.com/Braveliu/p/3616953.html强制类型转换const_cast的作用常量指针 被强转为 非常量指针,且仍然指向原来的对象;常量引用 被强转为 非常量引用,且仍然指向原来的对象;常量对象 被强转为 非常量对象,此过程赋值运算符构造了新的对象,新的对象去掉了源对象的部分const属性。实列代码代码如下:#include <iostream>using namespace std;const
2020-07-29 15:32:01 1018
转载 C++类型转换
来源:https://www.cnblogs.com/Braveliu/p/7372714.htmlC++类型转换C++类型转换主要分为两种:隐式类型转换、显式类型转换(强制类型转换)。隐式类型转换所谓隐式类型转换,是指不需要用户干预,编译器默认进行的类型转换行为(很多时候用户可能都不知道到底进行了哪些转换)。隐式类型转换一般分为两种:内置数据类型、自定义数据类型。内置数据类型(基本数据类型)例1:混合类型的算术运算表达式中int nValue = 8;double dValue = 10
2020-07-29 09:16:09 127
转载 C++函数指针
来源:https://www.cnblogs.com/Mered1th/p/10502633.html函数指针介绍函数指针是C++中比较灵活而且重要的部分,对于软件的灵活度上有很大的帮助 。函数指针指向的是函数而非对象,和其他指针一样,函数指针指向某种特定类型,函数的类型由它的返回类型和形参类型共同决定,与函数名无关。bool lengthCompare(const string &,const string &);该函数的类型是bool(const string& ,c
2020-07-27 15:17:46 191
转载 C++多态
来源:https://blog.csdn.net/studyhardi/article/details/908157661.初探多态性在面向对象方法中,所谓多态性就是不同对象收到相同消息,产生不同的行为。在C++程序设计中,多态性是指用一个名字定义不同的函数,这些函数执行不同但又类似的操作,这样就可以用同一个函数名调用不同内容的函数。换言之,可以用同样的接口访问功能不同的函数,从而实现“一个接口,多种方法”。事实上,在程序设计中经常会使用到多态性。最简单的例子就是运算符了,例如我们使用运算符+,就可以
2020-07-26 14:20:08 122
转载 菱形继承和虚继承
来源:https://blog.csdn.net/audience_fzn/article/details/814632751.单继承和多继承单继承:一个子类只有一个直接父类时,称这个继承为单继承。多继承:一个子类有俩个或以上的直接父类时称这个继承关系为多继承。单继承:可以有多个父类,但是只能由一个直接父类。多继承:可以有多个直接父类。2.菱形继承菱形继承示例:class person{public: string _name;}; class student : p
2020-07-25 19:44:48 103
转载 C++中的继承
1.为什么要使用继承继承性是一个非常自然的概念,现实世界中的许多事物都是具有继承性的。人们一般用层次分类的方法来描述他们的关系。例如,下图就是一个简单的汽车分类图:在这个分类树中建立了一个层次结构,最高一层是最普遍、最一般的,每一层都比它的前一层更具体,低层具有高层的特性,同时也有与高层的细微不同。例如,确定了一辆车是客车以后,没有必要再指出它可以进行运输,因为客车本身就是从运输汽车类中派生出来的。1.1 继承的概念继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有的特
2020-07-25 19:32:37 155 1
转载 C++11多线程-线程局部存储(thread_local)
来源:https://www.jianshu.com/p/8df45004bbcbC++存储类型线程局部存储在其它语言中都是以库的形式提供的(库函数或类)。但在C++11中以关键字的形式,做为一种存储类型出现,由此可见C++11对线程局部存储的重视。C++11中有如下几种存储类型:序号类型备注1autoright-aligned 该关键字用于两种情况:1. 声明变量时, 根据初始化表达式自动推断变量类型。2. 声明函数作为函数返回值的占位符。2staticstati
2020-07-24 20:50:55 1777
转载 C++存储类
文章目录欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编
2020-07-24 19:27:43 349
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人