
C++
NeilZhy
天道酬勤,还有一年
展开
-
CMake 打包已经存在的动态库生成 target
一. 背景在 CMakeLists.txt 中,某模块 A 通过 add_subdirectory 引入模块 B ,模块 B 通过 add_subdirectory 引入模块 C。模块 C 里面本身就是一个开源的动态库,比如 libtask。目的想要将 C 模块打包成一个 Target ,以便在 A 模块中中使用方便。二. 旧版本实现和存在问题A 模块不直接使用 C 模块,但是 A 模块使用到了 B 模块,B 模块编译依赖 C 模块,就需要导致 A 编译时要通过下面的方式引入 C 模块 incl原创 2021-12-01 19:53:23 · 2989 阅读 · 0 评论 -
工厂方法模式和抽象工厂模式
工厂方法模式和抽象工厂模式工厂方法模式抽象工厂模式总结:工厂方法模式#include <string>#include <iostream>// Abstractclass Splitter{private: /* data */public: Splitter(/* args */); virtual ~Splitter();p...原创 2020-04-19 18:24:18 · 253 阅读 · 0 评论 -
智能指针1.0
一.使用普通的动态内存开辟存在的问题我们在使用动态内存开辟一个空间的时候,需要释放掉这个空间,不然就容易出现内存泄漏。比如下面的程序情况一:#includeusing namespace std;int errorTest(){ intflag = 0; cin>> flag; int*p = new int;原创 2017-09-01 17:01:28 · 443 阅读 · 0 评论 -
动态内存管理和智能指针 2.0 -- shared_ptr
shared_ptr出现原因通过第一章的学习,我们知道不管是auto_ptr合适scoped_ptr都是存在缺陷的,于是我们必须想出一个方法既能很好的管理我们的内存,而且在使用的时候,可以多个指针指向一个内存,这个时候就出现了shared_ptr。shared_ptr的实现原理shared_ptr使用的引用计数的浅拷贝的形式,这个时候是不需要使用引用计数的写时拷贝的,因为多个指针指向的是同一个动态的原创 2017-09-11 20:54:16 · 745 阅读 · 0 评论 -
继承和多态 3.0 -- 菱形继承
单继承和多继承菱形继承解决菱形继承 -- 虚拟继承虚继承对象模型原创 2017-09-21 12:38:16 · 554 阅读 · 0 评论 -
二叉树 2.0 -- 非递归遍历
二叉树递归遍历的问题二叉树的非递归遍历实现和浅析原创 2017-10-10 14:15:50 · 572 阅读 · 0 评论 -
二叉树 1.0 -- 创建二叉树、遍历二叉树、二叉树常见问题求解
树二叉树的结构创建一个树二叉树的遍历二叉树的各种求解原创 2017-09-28 17:25:59 · 1102 阅读 · 2 评论 -
模板1.0 -- 模板基本原理
为什么需要模板我们经常有这样的一种使用的情形,就是我们可能需要设计一个函数,然后函数的参数可能是整形的,也可能是浮点型的,还有可能是其他的类型的,这个时候如果对于每一个类型都写一个函数,未免有点太复杂了我们有以下几个方法来实现一个函数针对不同的类型都能够实现 法一:通过函数重载实现比如我们想要写一个相加的函数,我们需要实现函数的重载int Add(const int原创 2018-01-05 10:00:49 · 754 阅读 · 1 评论 -
五种IO模型
五种IO模型在进程使用磁盘的数据的时候,需要用到几个空间 磁盘 内核缓冲区kernel buffer 用户缓冲区app buffer 其中内核缓冲区和用户缓冲区都属于内存的范畴,首先内核需要将数据从磁盘拷贝到内核缓冲区,然后再从内核缓冲区拷贝到用户缓冲区,接下来才能够被用户进程使用 这里首先定义几个角色和空间,两个角色kernel,httpd,五个存储空间磁盘,内核...原创 2018-08-16 07:51:24 · 449 阅读 · 0 评论 -
qt 找不到 -lpulse-mainloop-glib,找不到 -lpulse问题
问题:使用 QT 编写视频展现程序报错找不到运行时库文件解决办法:首先 sudo find / -name libpulse.so*然后 sudo cp /usr/lib/x86_64-linux-gnu/libpulse.so.0 /usr/lib/libpulse.so对于libpulse-mainloop-glib首先find / -name libpulse-mainloop-g...原创 2019-04-17 23:52:53 · 1451 阅读 · 0 评论 -
Cmake 实例学习 一
一. 第一个简单的例子在一个目录下面实现一个简单的 hello world 程序使用cmake进行构建的时候,每个目录下面都要有一个 CMakeLists.txt 的文件如果是一个稍微大的工程,有多级目录,在上级目录中的 CMakeLists.txt 中会有定义要求编译子目录的逻辑当前目录中定义了一个main.c 和 CMakeLists.txt 文件,两个文件的内容分别如下main....原创 2019-07-13 15:02:02 · 386 阅读 · 0 评论 -
Cmake 交叉编译
转载自 http://zhixinliu.com/2016/02/01/2016-02-01-cmake-cross-compile/CMake交叉编译CMake的使用,以及如何将一个项目移植到Android。CMake的用法先让我们简单学习回顾一下cmake的基本知识:基本流程以linux平台为例,使用 CMake 生成 Makefile 并编译的流程如下:编写 CMake 配...转载 2019-09-05 20:31:35 · 541 阅读 · 0 评论 -
模板的分离编译
模板不支持分离编译我们来分析一下模板为什么不支持分离编译呢,所谓的分离编译就是我们在编写程序的时候可能会出现如下的一种情况就是,(我下面就是举具体的例子了)代码//*****************template.h***********//#includeusing namespace std;templateclass A{public: void原创 2017-09-01 14:24:22 · 782 阅读 · 0 评论 -
继承和多态 2.0 -- 继承的六个默认成员函数
子类的构造函数拷贝构造函数赋值运算符的重载析构函数原创 2017-09-18 17:36:53 · 681 阅读 · 0 评论 -
STL模拟实现1.0 -- list和iterator模拟实现和简单分析
iterator迭代器简单模拟实现STL 中的list原创 2017-09-15 19:48:16 · 608 阅读 · 0 评论 -
C++运算符重载
C++的运算符重载是它的一个特性,方便我们结果很多问题,也符合我们平时使用的一个习惯,但是运算符重载中有很多的问题,下面的代码尤其是注释部分很好的解释了这些问题#includeusing namespace std;class Complex{public: Complex(double real = 0.0,double imag = 0.0); //这里在声明的时候可以给赋原创 2017-03-09 10:46:17 · 565 阅读 · 0 评论 -
C++构造函数和析构函数
构造函数和析构函数一.构造函数构造函数时一种特殊的函数,它主要用于为对象分配空间,进行初始化。(注:构造函数没有this指针)1. 构造函数的几个特点:函数名与类名相同参数任意,但是没有返回值,viod也不行它是在实例化对象的时候自动的调用,而不需要用户调用构造函数可以重载构造函数可以写在类体内,也可以写在类体外2. 构造函数的调用形式原创 2017-03-07 13:49:38 · 876 阅读 · 0 评论 -
《C++primer》第二章--变量和基本内置类型
基本内置类型如何选择类型的几点建议 当明确知晓数值不能为负数时,选用无符号类型使用int进行整数运算。因为short一般表示的范围比较小,而long一般和int有相同的范围。如果表示的范围超过了int就使用long long算术运算时尽量不要使用char和bool,只有在存放字符型数据和布尔值的时候使用。因为char的符号在有的机器上面是有符号,在另外的一些机器上面确实无符号的,很容易出错。原创 2017-04-09 12:43:26 · 782 阅读 · 0 评论 -
《C++primer》第一章--开始
《C++primer》读书心得体会 内容理解和思考 重要知识笔记初识标准输入输出 注释不能嵌套 for循环的执行过程原创 2017-04-03 14:15:40 · 1071 阅读 · 1 评论 -
杂记5
1. 定义C++函数在定义C++函数的时候我们尽量把这个函数里面的参数赋初值,还有就是构造函数中尽量去使用初始化成员列表去初始化这个成员变量原创 2017-03-12 15:29:40 · 551 阅读 · 0 评论 -
谁知道静态成员的纠结心境
我们在实际开发的过程中,可能需要某些类的成员变量并不是针对每一个对象的,而是针对每一个类而言的,比如在银行中有一个利率数据,我们希望的是,当一个利率改变的时候,所有的对象都能够看到这个改变的数据,并利用它,而不是每一个对象都有一个利率成员变量。这个时候就设计到了静态成员变量。一. 内存那些事静态成员变量是存放在静态全局区(数据段),一个对象改变了其中的静态变量,其他对象的这一变原创 2017-07-20 15:47:49 · 627 阅读 · 0 评论 -
哈希--直接定值法和除留取余法
1. 哈希是一种算法,哈希表是用哈希算法构造出来的一种数据结构2. 哈希算方法的几种方法直接定值法这里有一个例题,就是我们想判断某一字符串中,某一个字符出现的个数,我们可以使用哈希的思想,就是可以遍历一遍字符串,然后开辟一个拥有26数据的整型数组,然后初始化全部为0,然后统计利用一种映射的思想,遍历字符串的时候,就把相应的位置++,每次我们查找某一个字符的时候,一下子就可以原创 2017-08-07 16:38:15 · 5181 阅读 · 0 评论 -
程序的编译和链接过程
一.虚拟机、linux简介简单介绍一下虚拟机还有就是各种操作系统,比如centos,Ubuntu操作系统:linux(centos、Ubuntu、redhat),Android,Windows(xp、win8、win10)进程,多个程序,分时技术,并行技术一次打开多个程序,我们在只有一个cpu,如何让这些程序进行执行呢,看起来好像是在同时进行的,实际上是一个程序执行了一点点时间,然原创 2017-07-23 16:48:13 · 982 阅读 · 0 评论 -
Effective C++ 1.0 -- 概述
声明对象声明,函数声明,类型声明,是告诉编译器某个东西的 名称和类型,但是略去了实现 细节,因为定义在其他的地方。external int x; //对象(object)声明std:size_t numDigits(int number) //函数 声明class Widget; //类(class)声明template<class T>class Grap原创 2017-09-14 12:50:23 · 547 阅读 · 0 评论 -
继承和多态 1.0 -- 继承概念(is-a、has-a,赋值兼容规则,隐藏重定义)
普通继承和访问权限问题:没有合适的构造函数is-a和has-a赋值兼容规则 -- 必须是公有继承(is-a)重定义 -- 把父类成员隐藏起来原创 2017-09-14 16:56:42 · 1074 阅读 · 0 评论 -
设计1.0 -- iterator 和const_iterator底层的模拟实现
STL中迭代器和const迭代器的模拟实现分析设计迭代器的时候为什么给他设计了三个模板参数原创 2017-09-15 17:23:34 · 964 阅读 · 1 评论 -
函数返回类的对象与拷贝构造函数
C++中,如果我们在一个函数中,定义了一个类的对象,然后返回这个对象,在main函数中用一个对象去接受这个返回的对象的时候,这里面参与的函数调用大家可能不熟悉,这里通过程序和注释的方式给大家讲解一下。编译的环境是vs2013,我下面是进入单步调试时测试出来的结果。大家可以把下面的代码在自己的vs上面调试一下,结合着我的注释内容(我把解释部分直接放在了代码注释里面了),做更加深刻的理解。 #i原创 2017-03-08 08:38:29 · 1668 阅读 · 0 评论