自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(82)
  • 收藏
  • 关注

原创 c++ noexcept 的用法

使用方法void foo() noexcept;声明上面的函数不会抛出异常,如果一个异常没有在函数里面被处理,这个函数就会终止这个程序,抛出std::terminate,之后就会调用std::abort。而且你也可以用另一种方法去声明这个函数抛出异常的方式比如下面这个,表示如果x.swap(y)不抛出异常的话,那么整个的都不会抛出异常void swap(Type& ...

2019-07-27 13:32:27 3299

原创 c++ using的一些用法

在谈谈using 在c++2.0之后的新增用法之前,还需要先了解一下什么叫做Alias Template。之后才能更好理解为做什么要这么使用。1.结合Alias Template所使用的对模板typedef什么是Alias Template?就是设计一个模板,并且对这个模板的类型进行typedef操作。下面看一下的使用template <typename T>usi...

2019-07-27 12:35:53 236

原创 1. Variadic Template 模板参数可变

介绍模板的参数在照往常来说是固定的大小之后让编译器进行推导,但是现在c++11出现了新的东西就是模板函数的参数可以使不确定的。下面来看一个实例template <typename T , typename... Types>void Print(const T & FirstArg,const Types &... arg){ cout <&...

2019-07-21 11:12:04 329

转载 c++ 虚函数 虚函数表 个人理解

参考文章:https://blog.csdn.net/qq_20309055/article/details/79298593整理一份关于虚函数和继承关系的脑图前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白...

2019-07-05 13:40:59 236

原创 weak_ptr智能指针

为什么需要weak_ptr?因为虽然我们可以使用shared_ptr指针,但是不得不说使用shared_ptr还有一些不美好的地方需要注意和解决,所以我们的weak_ptr也是为了帮助解决这些问题而设计出来的。问题如下:环向指向:两个共享指针之间互相指向,所以就永远也不会出现计数器减为0的情况出现所以,就不会释放资源。 想共享但是不愿意拥有:比如说引用的寿命其实比引用的对象存活时间长...

2019-07-04 19:51:53 349

原创 shared_ptr智能指针设计与使用

管理pointer很难我们需要保证当许多个指针指向同一个对象的时候,我们怎么去管理这些指针,并且不希望出现空悬指针和多次析构一个指针的情况出现。通常为了解决以上的尴尬,我们使用智能指针来实现对于pointer的管理。smart pointer可以实现知道自己什么时候应该释放自己的内存,而不至于影响到其他场合对于块内存的使用。但是在使用智能指针的时候我们仍需要考虑到其特点不然也会为其的智能化...

2019-07-04 18:51:27 233

原创 c++ 异常处理

程序异常的概念主要是指出现了一些很少发生或者出乎意料的状态,通常显示一个程序的错误或者要求一个必须回应的。如果不能满足这个回应则会经常造成程序卡死不能进行相应的处理。c语言里面有几个异常管理机制,这些标准在c++里面也可以用,但是c++设计了更加方便的基本不可见处理方式。使用try与catch块就可以实现对程序异常的捕捉和处理,但是注意的是一定要保证所有的异常的类型和抛出异常类型的一致...

2019-07-02 20:32:50 452

原创 构建libgdx游戏项目出现的com.android.ide.common.process.ProcessException: Failed to execute aapt错误

看了好多个人写的blog但是没有我能用的上的,我是用的是GDX1.1这个版本的libgdx库所以,它使用的Gradle版本其实比较低,用的是1.11的版本,而我使用的Android studio是2017的,默认的Gradle版本是4.6,所以首先我就去Android build.gradle里面去修改了一下自己的配置,改成4.6 什么gradle-wrapper.properties里面也要...

2019-05-19 16:08:34 353

原创 UDP协议简介

UDP是什么?UDP是一个简单的面向数据报的传输层协议,产生的数据包封装成IP报之后经过网络层,数据链路层层层传递UDP的特点UDP是数据报不是流,所以不会像TCP那样有分包的概念,不管数据包是怎么样的就直接发送出去。所以才会产生IP分片,而TCP会进行流量控制,会分包组合,所以一般不会导致很多的IP分片产生 UDP不提供可靠性,直接发出去也不会再去保留,只能算是尽力交付UDP主要...

2019-05-11 22:42:52 2045

原创 IP源站路由

IP源站路由IP地址按理来说是不变的,发出的每一地址把目的地址藏住并且使用下一个跳的IP地址,每一跳的IP地址都会改变。但是可能被会被攻击,被引导到另一条路上面。严格源站路由必须每一站都是直连的,宽松的源站路由不一定是直连的,可以跨过好几跳之后再去选择新的IP地址。IP选路其实是一个路由的守护进程,通常是一个用户进行层。大多数的守护进程都是路由程序和网关程序。路由守护进程和...

2019-05-11 21:04:44 1562

原创 ARP与ICMP

1.ARP协议ARP是用于解析IP地址所对应的MAC地址的,PC可以直连也可以连接路由器之后再去查找IP的MAC地址。如果PC和主机是直接连在一起的话那就可以直接查询,如果中间有路由地址的话就会去路由表里面查找下一跳是什么地址,如果是非直连一般会解析网关的mac地址。ARP会给网络中所有的节点发送ARP数据包(二级广播包),之后解析到mac地址就会发送给应用,也是一个二级的单播包,只有请求方会...

2019-05-11 21:01:12 1236

原创 strlen函数以及string类使用心得

复习一下strlen函数其实,给strlen函数之后它就会向下偏移统计个数,遇到当前位置字符为'\0'才会停下来。如果没有的话就有可能接着往下走下去,甚至会超过开辟空间的区域指向一片未开辟空间赋值的空间。所以服务端这边接收的buffer要比需要接收的数据大小大一点才不会在strlen的时候出现问题,因为数组里面的数据都占满了,最后一个'\0'的位置没留下来,粗心大意。函数原型...

2019-05-11 15:05:31 3245

原创 boost.asio async_read_some 和 async_read

这次做的这个项目就遇到一些问题想要达到的效果是每次先读取100字节的内容,之后根据这里面的数据长度的提示去找到接下来需要继续读出来的数据长度是多少,但是还是遇到了一些问题没有解决。所以又回头去看了一下API到底都是怎么回事。首先我之前使用的是ip::tcp::socket::async_read_some()basic_stream_socket::async_read_someT...

2019-04-24 01:34:45 10282

原创 Linux进程调度过程

目录什么是进程调度程序?多任务操作系统时间片进程调度的策略进程优先级优先级数组重新计算时间片schedule函数schedule函数如何找到下一个需要执行的进程?计算优先级与时间片睡眠与唤醒Linux负载平衡程序抢占与上下文切换用户抢占内核抢占什么时候调度内核才是安全的呢?内核抢占的发生时间点什么是进程调度程序?调度程序是...

2019-04-19 01:47:09 1171

原创 LInux进程创建过程

写时拷贝传统的fork系统调用直接把所有的资源复制给新创建的进程,但是这种实现过于简单,效率低下,因为并不支持拷贝数据的共享。更糟的是如果新进程打算立即执行一个新的映像那么所有的拷贝都将前功尽弃。Linux下面的fork采用的是写时拷贝的方法,也就是说让父进程与子进程拥有同一份拷贝,之后如果发生了写入数据的情况。再也根本不会被写入的情况下,它就不会复制了。例如直接调用了exec()...

2019-04-15 22:58:41 3028

原创 STL源码剖析读书笔记 迭代器概念traits编程技法

迭代器的设计思维--STL设计理念STL在设计的时候希望达到将数据结构和算法分离开来独立设计,最后再使用一点耦合剂来使它们联系起来。这里举了一个容器、算法、迭代器的例子,就是find函数,对于不同类型的迭代器,都可以讲其中的数据与value进行对比,其实表面上看上去迭代器是依附于容器的,那么迭代器是如何设计的呢?它的本质又是什么?template <class InputIte...

2019-04-15 01:50:02 189

原创 基础算法之二叉树 2 二叉树的序列化和反序列化

关于二叉树的序列化和反序列化的概念解释第一次接触这个可能会比较懵,什么叫序列化和反序列化?序列化:系统为了保存二叉树的存储结构从而把二叉树变成了一串字符串记录在文件等地方 反序列化:就是将字符串去恢复成二叉树序列化的整个思路遇见NULL的时候用#占位,因为没有‘#’就很难区分左右的节点 每一个字符保证用一个字符隔开,我这边用的是_,因为不这样做的话就会分不清变量 按照前序遍历的...

2019-04-15 01:42:57 380 1

原创 基础算法之二叉树 1 平衡二叉树的判断

什么是平衡二叉树?平衡二叉树指的是二叉树的每一个节点的左子树和右子树的高度差为不大于1所以由此推出判断的条件有每一个子树如果有一个出现不是平衡二叉树的话就一定不是平衡二叉树 如果遍历得到的某一个节点出现了,二叉树的高度之差大于1也不是二叉树 每次遍历之后都要返回左右子树的深度 如果该节点满足二叉树的要求,该二叉树的深度就是它下面最高的子树的大小加上自己的大小#include ...

2019-04-14 20:02:01 200

转载 C++时间戳转换成标准时间

对方发过来的时间格式是时间戳,我这边需要解析成普通的日期格式,参考了下面的帖子https://www.cnblogs.com/kaituorensheng/p/3922919.html使用的是time.h里面函数,还是c的函数比较好用void JsonMeterMessage::timeConvert(string timeStamp){ stringstream s...

2019-04-14 00:18:21 5764 2

原创 基础算法 数组改成栈

#ifndef ARRAY2STACK_H#define ARRAY2STACK_H#include <memory.h>#include <iostream>class array2stack{ public: array2stack(); ~array2stack(); int poll(); ...

2019-04-08 16:34:53 203

原创 基础算法 数组转成队列

/******array2queue.h********/#ifndef __ARRAY_QUEUE_H__#define __ARRAY_QUEUE_H__#include <iostream>#include <stdio.h>#include <memory.h>#define ERROR_NOSPACE 10#define E...

2019-04-08 15:09:22 603

原创 effective c++ 条款18 19 20 21

条款18:让接口容易被使用,不易被误用在设计之前需要了解到用户可能会犯什么样的错误。原书中举例,设计一个表现日期的classclass Date{public: Date(int month, int day, int year); //...};这个最初的接口看起来没什么毛病但是,用户可能在输入的时候弄错次序并且可能会输入错误的不符合实际情况的日期格式。可以...

2019-01-26 14:15:08 269

原创 effective c++ 条款13 14 15 16 17

条款13:以对象管理资源在一个对象被开辟出来之后,需要占据一定的内存空间,如果空间是new出来的,就需要在合适的地方delete掉这款空间。如果调用delete析枸的是对象本身的话,一旦某些地方出现异常的话,或者是提前return导致来不及释放空间,就会导致内存泄露。有两个思路解决这些问题获得资源之后立即放进管理对象当中。使用auto_ptr管理对象,将对象作为初始化的参数放进去。 ...

2019-01-23 17:04:41 243

原创 effective c++ 条款 9 10 11 12

条款9:绝对不在构造和析构函数运行时调用virtual函数在base class构造期间virtual函数绝不会下降到derived class阶层,取而代之的是对象调用的是base class里面的函数。所以,此时的虚函数不能作为虚函数来看。因为派生类在调用基类的构造函数的时候,它本身被视作为base类所以不会有正确的函数被调用。条款10:使operator= 返回一个referen...

2019-01-23 17:03:36 202

原创 effective c++ 条款 4 5 6 7 8

条款4:确保变量之前初始化过变量的初始化和变量的赋值首先就是两个概念,初始化是为变量开辟一定的空间,但是赋值是为变量赋初值,和初始化有本质的不同。对于内置类型的成员变量,必须手动完成对变量的初始化。例如int x = 0;const char * text = "A C-Style String" ;double b;std::cin &gt;&gt; b;但是对于非内置...

2019-01-23 17:02:31 213

原创 github上传数据遇到问题! [rejected] master -> master (non-fast-forward)

! [rejected] master -&gt; master (non-fast-forward)今天往github上传东西的时候出现了这个错误,总结一下。之前使用过github上传东西但是,今天可能是我又创建了新的SSH链接所以需要密码和账号,但是密码账号验证之后还是会出现这种问题。后来看了一下别人的博客 ,貌似是因为两个电脑都要上传资料所以出现了问题,github拒绝访问解...

2019-01-06 22:11:56 5789 1

原创 boost_system库链接失败的问题

编译完一个boost.asio程序之后发现,出现错误 error while loading shared libraries: libboost_system.so.1.65.1: cannot open shared object file: No such file or directory奇了怪了我明明在makefile里面都链接库了,而且也给出了boost库的地址,为什么就运行的...

2018-12-31 14:58:51 3497

原创 Makefile分目录编写遇到的问题以及解决方法

最近在做boost相关的服务端开发,感觉程序多了之后文件夹里面很乱,就想着把他们分在不同的文件夹里面,这样看起来也很舒服,而且也不会很low,毕竟要上传到github上保存版本。给别人看也方便许多。多目录的Makefile网上有许多教程大多类似,但是实际上应用的时候还是遇见了许多问题。首先就是从src目录里面搜寻cpp文件,在include目录下面放头文件。找到相应objs目录下的.o文件...

2018-12-31 14:47:19 816

原创 GCC编译过程回顾

最近在查找有关Makefile的资料的时候又复习了一遍gcc编译的过程。1.预编译gcc -E hello.c -o hello.icpp hello.c &gt; hello.i宏定义的处理 #define #ifndef #endif等 处理#include后面文件的包含 忽略掉所有的注释 添加行号和文件名表示用于报错时候的提醒 保留#program编译器指令2.编译...

2018-12-30 20:23:21 257

原创 kernel 1-linux操作系统简述

多用户系统多用户系统就是一台可以并发独立的执行或者分别执行属于两个或者多个的若干应用程序的计算机。“并发”意味着几个程序可以同时的处于活动的状态并且竞争各种资源,比如CPU内存,硬盘等。"独立"代表可以不受影响的做自己的事情。 cpu有许多不同的工作模式,因而对于这些安全机制来说,操作系统需要积极利用CPU所提供的特权模式相关的机制,否则用户在使用的时候造成的误操作会带来很大影响。...

2018-12-29 15:46:24 860

转载 关于版本控制器git

版本控制着一概念也是最近开始和别的同学一起作响木材接触到的概念,其实之前就有感觉如果要手动去备份实在是很复杂很麻烦的一件事情。git是一个使用很简单而且应用广泛的版本管理器。接下来就来研究一下版本管理器的前世今生吧。关于版本控制什么是“版本控制”?我为什么要关心它呢? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。这句话摘自git的官网介绍,其实我认为它...

2018-12-24 04:45:36 218

原创 Linux下安装qq的方法

Linux下的qq腾讯官方是不支持开发了,所以就有许多民间的机构去开发这个。深度LINUX是一个立志于让linux系统更为人性化的组织,首先要知道问什么可以使用qq。因为他的底层是基于wine就是说类似于一个windows的虚拟机,这样我们可以将程序运行在一个伪windows的环境之下,虽然说qq的视频功能仍然有一些问题但基本的文件传输功能还是可以用的。首先就是要安装深度的wine作为程序运行...

2018-12-24 03:30:12 9008

原创 GNU Make 读书笔记:(二)对库的管理

管理程序库程序库(archive library 静态库)是一个特殊文件,该文件内含其他被成为成员的文件。程序库可以说用来将相关的目标文件聚集成容易操作的单元。生成静态库的操作创建一个新的静态库libdemo.a 并且加入demo1.o 和 demo2.o两个文件ar rv libdemo.a demo1.o demo2.o替代更新静态库ar rv libdemo.a ...

2018-12-01 17:50:12 142

原创 GNU Make读书笔记 :(一)规则

前言规则主要是分为三种:模式规则 隐含规则 静态模式规则具体规则:就是指定需要更新的工作目标,如果存在的依赖的时间戳在目标的后面就是对目标进行更新。这是最常见的规则类型。模式规则:使用的是通配符(wildcard)不是明确的文件名隐含规则:可以是模式规则也可以是内置于make的后缀规则,这会使得makefile编写的更加容易具体规则需要写好目标和它们所需要的依赖,如果两个目...

2018-11-30 16:59:29 241

原创 MySQL连接服务端时的几个bug

 最近在使用MySQL 做服务端的数据存储,之前只使用过sqlite3移植到开发板,属于嵌入式的那种文件式的关系型数据库,但是为了满足服务端的需求,必须使用sql server或者是MySQL这样的数据库开发才便于管理大型的数据存储和管理。MySQL是C/S模式的,一开始不是很理解为什么要用这种模式,即便我在一个系统内部本地的访问也还是需要使用客户端去连接服务端,则是因为Mysql-ser...

2018-11-16 17:38:22 404

原创 MySQL基础 对表操作

参考书籍:MySQL与MariaDB学习指南修改一张数据库里面的表之前我们需要对表进行备份,备份的工作一方面可以对表进行备份,另一方面是对整个数据库备份。1.先创建一个数据库和一张表CREATE database dogs; /*创建一个dogs的数据库*//*或者使用dogs作为默认的数据库 USE dogs; */CREATE TABLE dogs.dog( /*创...

2018-11-13 18:18:10 224

原创 Makefile的个人理解以及简单例子

makefile的作用用来进行条件编译来实现对工程编译的优化基本规则TARGET...:DEPENDENCE ...                   COMMAND                    ...目标:target程序产生的文件,如可执行那个文件和目标文件;目标也可以是要执行的动作,如:“clean” 依赖:dependence是用来产生目标的输入文...

2018-11-03 20:39:23 282

原创 关于使用boost asio库 出现的一些问题的总结

最近在使用boost库的时候,因为可能是自己的c++学的还不是很扎实吧,出现了很多令人啼笑皆非的错误。而且,我也不太能从一些错误提示中找到正确的解决思路。下面就是我的一个错误总结吧。一开始我对于boost asio库的运行模式不是很理解,经过一些错误总算有一点头绪。io_service的作用首先asio库主要就是对一些io进行操作,其中就有我的项目比较需要的网络socket的一些io功...

2018-10-29 23:26:56 7725

原创 C++ static成员变量与static成员函数

最近在做一个服务端的小项目这个项目要用到asio::streambuf这个对象。但是这个类的复制构造函数是私有的也就是导致了它不可以被复制构造。在传参数的时候就比较不方便,不够由于它是缓冲区,如果设置多个出现也是不方便。现在就想做一个static的streambuf,但是希望它是私有的,这样比较方便管理和控制。static成员变量如果一个类里面含有的是公有类型的static变量,那么就...

2018-10-23 17:28:27 382

原创 关于boost.asio里面的socket的私有性的问题

最近做一个服务端,刚开始使用boost库不是很熟练的使用,所以呢也出现了一点很蠢的问题。首先就是编了一晚上都不过的问题,而且还是头文件报错,其实也没什么就是这样一个类class Handle : public boost::enable_shared_from_this&lt;Handle&gt;{ public: Handle(boost::asio::io_ser...

2018-10-18 23:30:46 1279 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除