- 博客(107)
- 资源 (1)
- 收藏
- 关注

原创 Effective C++第三章总结
条款13:以对象管理资源 例: void f() { Investment *pInv = createInvestment(); ... //这里存在诸多“不定因素”,可能造成delete pInv;得不到执行,这可能就存在潜在的内存泄露。 delete ...
2018-09-25 00:58:57
261

转载 c++运行时多态复习
C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数 1:用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。 2:存在虚函数的类都有一个一维的虚函数表叫做虚表,类的对象有一个指向虚表开始的虚指针。虚表是和类...
2018-07-14 10:23:57
2619
转载 【实测国内充值成功】ChatGPT Plus会员开通指南,过程简单、高效、不复杂!
实测国内充值成功,ChatGPT Plus会员开通指南,过程简单、高效、不复杂!
2024-11-16 02:48:13
6391
1
转载 帧同步游戏开发基础指南
转载来源:https://cloud.tencent.com/developer/article/1050868什么游戏适合帧同步这种技术?在现代多人游戏中,多个客户端之间的通讯,多以同步多方状态为主要目标。为了实现这个目标,主要有两个方向的技术:一种叫状态同步:客户端发送游戏动作到服务器,服务器收到后,计算游戏行为的结果,然后通过广播下发游戏中各种状态,客户端收到状态后显示内容。这种做法类似于各个客户端都远程操作服务器上的软件。最早的mud,以及后来大量的国产网游,特别是回合制游戏,都是这种方
2021-06-25 10:44:04
432
转载 游戏服务器中常见的数据一致性问题分析
什么是一致性问题在游戏服务器的开发中,我们经常会碰到所谓“一致性”问题,以及碰到各种为了解决这种问题所做的“方案”,那么,什么是一致性问题呢?其实非常简单,就是有两个客户端进程,都需要修改同一个数据,造成的问题。譬如服务器上有一个怪物,玩家 A 释放了一个火球,根据业务逻辑,火球会扣减 10% 的最大 HP 值作为伤害;玩家 B 对怪物砍了一刀,扣减怪物的 HP 需要计算玩家 B 的攻击力和怪物的防御力。那么一般我们编写程序的时候,就会先从“怪物”和“玩家”读取其数值,包括“攻击力”,“最大 HP”
2021-06-23 17:47:28
1006
原创 2021-03-23
Go基础问题汇总1.cap()和len()函数的区别是什么?len()返回切片中的元素个数。 cap()返回切片中容量即切片可以容纳的元素个数。2.select作用:随机选择一条没有被读写阻塞的case加以执行,通常是管道IO;3.主协程如何等其余协程完再操作?等待组(sync.WaitGroup) 和 管道(channel);10个子协程,子协程结束任务,向一个切片中写入true,主协程循环查看切片的长度,为10时退出。4.什么情况下会死锁,如何避免?...
2021-03-24 01:21:04
398
转载 c++11 constexpr
constexpr是C++11中新增的关键字,其语义是“常量表达式”,也就是在编译期可求值的表达式。最基础的常量表达式就是字面值或全局变量/函数的地址或sizeof等关键字返回的结果,而其它常量表达式都是由基础表达式通过各种确定的运算得到的。constexpr值可用于enum、switch、数组长度等场合。constexpr所修饰的变量一定是编译期可求值的,所修饰的函数在其所有参数都是cons...
2019-07-30 09:18:13
299
转载 c++ vector中的resize与reserve
关于STL中vector的resize与reserve方法,作以下记录:1.reserve(n):预分配n个元素的存储空间。如:vector<int> vecData;vecData.reserve(10);调用reserve(10)方法后,则为vecData预分配了可以存储十个int对象的存储空间,但仅仅是分配空间,里面并没有存储对象。我们知道容器中会有初始预...
2019-07-28 22:29:10
529
转载 find和find_if算法
1、STL算法里的find和find_if算法的使用:区别于联系:联系:这个两个函数都是查找某个元素位置的方式;区别:其中find值适用于查找其里面元素值的位置。而find_if值使用与函数第三个参数的为判别式时的使用。template<class InputIterator, class T>InputIterator find ( InputIterator first...
2019-07-28 22:25:42
1359
转载 C++中vector的删除
在vector中有三种涉及删除的方法,第一种是vector::clear(),第二种是vector::erase(),第三种是vector::pop_back()。clear用来清空整个vector,同时将size变成0,无返回值;erase通过传入迭代器进行删除,既可以删除单个元素,也可以删除某一范围的元素,删除之后它将返回下一个位置的迭代器;pop_back用来删除末尾元素,同时将...
2019-07-28 22:21:05
11256
2
转载 【C++】explicit关键字
本文转自:https://www.cnblogs.com/dwdxdy/archive/2012/07/17/2595479.htmlC++提供关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换发生.声明为explicit的构造函数不能在隐式转换中使用.C++中,一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数),承担了两个角色.1....
2019-07-18 00:21:56
199
转载 C++之Lambda表达式
1. 概述C++ 11 中的 Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda 的语法形式如下:[函数对象参数] (操作符重载函数参数) mutable 或 exception 声明 -> 返回值类型 {函数体}可以看到,Lambda 主要分为五个部分:[函数对象参数]、(操作符重载函数参数)、mutable 或 exception 声明、-&g...
2019-07-16 01:09:34
447
转载 我眼中的 RPC
什么是 RPC ?RPC 是一种框架或者说一种架构,主要目标就是让远程服务调用更简单、透明,调用远程就像调用本地一样。百度百科解释:RPC(Remote Procedure Call) - 远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,R...
2019-07-08 09:57:09
252
原创 Go程序设计语言读书笔记-第八章
第八章-goroutine和通道goroutine:在go里,每一个并发执行的活动成为goroutine。语法上,一个go语句实在普通的函数或者方法调用前加上go关键字。go f() //新建一个f()的goroutine,不用等待通道:如果说goroutine是Go程序并发的执行体,通道就是他们之间的连接。通道是可以让一个叫goroutine发送特定值到另一个goroutin...
2019-04-17 11:24:01
325
原创 Go程序设计语言读书笔记-第七章
第七章-接口Go语言的结构的独特之处在于它是隐式实现。就是对于一个具体的类型,无需声明他实现了哪些接口,只要提供接口所必须的方法即可。接口是一种抽象类型,他并没有暴露所含数据的布局或者内部结构。一个接口类型定义了一套方法,如果一个具体类型要实现接口,那么必须实现接口类型定义中的所有方法。实现接口:如果一个类型实现了一个接口要求的所有方法,那么这个类型实现了这个接口。// 薪资...
2019-04-16 11:09:46
303
原创 Go程序设计语言读书笔记-第六章
第六章-方法方法声明:只是在普通函数名字前面多了一个参数。这个参数吧这个方法绑定到这个参数对应的类型上。附加的参数p成为方法的接收者。func (p Point)Distance(q Point)float64{ return math.Hypot(q.X-p.X,q.Y-p.Y)}Go和许多其他面向对象的语言不同,他可以将方法绑定到任何类型上。可以很方便地为简单的类型定义...
2019-04-16 10:05:41
281
原创 Go程序设计语言读书笔记-第五章
第五章-函数实参是按值传递的,搜易函数收到的每个实参的副本。如果提供实参包含引用类型,比如指针、slice、map、函数或者通道,那么函当函数使用形参变量时就有可能会间接地修改实参变量。Go可以使用递归。Go语言的实现使用了可变长的栈,栈的大小会随着使用而增长,可达到1GB左右的上限。这使我们可以安全地使用递归而不用担心溢出的问题。多返回值,一个函数能够返回不止一个结果。一个函数如...
2019-04-15 14:07:10
284
原创 Go程序设计语言读书笔记-第四章
第四章-复合数据类型数组:由于数组的长度固定,所以在Go里面很少用。var a [3]int fmt.Println(a[0])fmt.Println(a[len(a)-1])//输出索引和元素for i,v := range a{ fmt.Printf("%d %d\n",i,v)}//初始化数组var q [3]int = [3]int{1,2,3}var...
2019-04-15 14:00:23
301
转载 c++11 多线程
前言:前段时间初看了下Boost库,看到线程学了下。c++11是有线程的,这个之前我也是知道的,但就感觉自己没怎么系统的学过,翻了下c++primer 居然没有讲线程的,真是坑啊。。。怪不得总感觉自己学c++语言方面没系统的学过这东西。。还是看的少。多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任务处理:基于进程和基于线程。...
2019-04-04 01:00:00
907
原创 Go程序设计语言读书笔记-第三章
有符号和无符号整数:8位,16位,32位,64位:int8、int16、int32、int64、uint8、uint16、uint32、uint64浮点数:float32和float64字符串:内置的len函数返回字符串的字节数,试图访问许可范围以外的字节会触发宕机异常。s := "left foot"t := ss +=", right foor"s[0] = 'L' //编译...
2019-03-31 22:48:48
270
原创 Go程序设计语言读书笔记-第二章
第二章-程序结构如果一个实体在函数中声明,只在函数局部有效。如果在函数外,对包里的所有源文件可见。实体第一个字母的大小写决定其可见性是否挎包。如果以大写字母开头,意味着对包外是可见和可访问的,可以被自己包之外的其他程序所引用,如:fmt包中的Printf。声明:varname type = expression短声明:name := expressionname的类型由express...
2019-03-13 18:40:09
296
原创 Go程序设计语言读书笔记-第一章
Go程序设计语言读书笔记- 第一章-入门Go代码使用包来组织的,包类似其他语言中的库和模块,一个包由一个或者多个.go源文件组成,放在同一个文件夹中,文件夹的名字描述了包的作用。每一个源文件的开始都用package声明,列子里面是package main,说明这个文件属于哪一个包。main是一个用来定义一个独立的可执行程序。import声明必须跟在package后面。import导入声...
2019-03-13 18:39:20
395
转载 panic和recover的使用规则
转自:https://www.cnblogs.com/vikings-blog/p/7109519.html转自个人博客 chinazt.cc在上一节中,我们介绍了defer的使用。 这一节中,我们温习一下panic和recover的使用规则。在golang当中不存在tye ... catch 异常处理逻辑。在golang当中使用defer, panic和recover来控制程序执行流...
2019-02-26 17:02:40
900
转载 golang中defer的使用规则
转自:https://www.cnblogs.com/vikings-blog/p/7099023.html转自个人博客chinazt.cc在golang当中,defer代码块会在函数调用链表中增加一个函数调用。这个函数调用不是普通的函数调用,而是会在函数正常返回,也就是return之后添加一个函数调用。因此,defer通常用来释放函数内部变量。为了更好的学习defer的行为,我们首先...
2019-02-26 15:40:48
264
原创 Go语言TCP连接
https://blog.youkuaiyun.com/Rage_/article/details/82432790 TCP连接学习http://docscn.studygolang.com/pkg/net/ Go net库文档参考其他博客链接:https://cloud.tencent.com/developer/article/1064525https://blog.youkuaiyun.com/ha...
2019-02-25 18:35:52
2977
转载 大话设计模式(C++)第九章-原型模式
概念原型模式(Prototype):用原型示例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 它主要面对的问题是:“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。 三、说明(1)原型模式实际上就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。(2)一般在初始化的信息...
2018-11-27 16:40:52
274
转载 大话设计模式(C++)第八章-工厂方法模式
概念工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法是一个类的实例化延迟到其子类。包含的角色(1)抽象工厂(2)具体工厂(3)抽象产品(4)具体产品 简单工厂模式:https://blog.youkuaiyun.com/Rage_/article/details/83622312优势(1)工厂方法模式是对简...
2018-11-26 15:29:22
314
转载 大话设计模式(C++)第七章-代理模式
概念代理模式:为其他对象提供一种代理以控制对这个对象的访问。 应用场景(1)远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。(2)虚拟代理,是根据需要创建开销很大的对象。通过他来存放实例化需要很长时间的真实对象。例如:图片加载的时候。(3)安全代理,用来控制真是对象访问时的权限。(4)智能指引,是指当调用真...
2018-11-21 18:59:55
209
转载 大话设计模式(C++)第六章-装饰模式
二、概念装饰模式:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。装饰模式是为已有功能动态地添加更多功能的一种方式。三、说明角色:(1)Component是定义一个对象,可以给这些对象动态地添加职责。(2)ConcreteComponent是定义了一个具体的对象,也可以给这个对象增加一些职责。(3)Decorator,装饰抽象类...
2018-11-20 13:11:14
246
原创 大话设计模式C++实现-第3.4.5-设计原则(1)
第三章-单一职责原则(1).就一个类而言,应该仅有一个引起它变化的原因。(2)如果一个类承担的职责过多,就等于把这些职责耦合在了一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。(3)软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。其实要判断是否分离出来,也不难,那就是如果你能够想到多于一个...
2018-11-19 18:06:23
174
转载 大话设计模式(C++)第二章-策略模式
策略模式:他定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 三、优点与解析(1)策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,他可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。(2)策略模式的Strategy类曾是为Context定义了一些列的...
2018-11-19 16:40:20
209
原创 大话设计模式(C++)第一章-简单工厂模式
问题:写一个简单的计算器。普通的写法:#include<iostream>using namespace std;int main(){ double NumberA,NumberB; cout<<"请输入数字A: "; cin>>numberA; cout<<"请输入数字B: "; cin...
2018-11-01 16:36:00
313
转载 STL底层数据结构
C++ STL 的实现: 1.vector 底层数据结构为数组 ,支持快速随机访问 2.list 底层数据结构为双向链表,支持快速增删 3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问deque是一个双端队列(double-ended que...
2018-10-08 10:48:32
210
原创 移动语义和右值引用
右值引用:c++的传统引用(现在成为左值引用)使得时标符关联到左值。左值是一个表示数据的表达式(如变量名或解除引用的指针),程序可以获取其地址。C++11新增了右值引用,用&&表示。右值引用可以关联到右值,即可出现在赋值表达式的右边,但不能对其应用地址运算符的值。右值包括字面常量、如x+y等表达式以及返回值的函数:int x =10;int y = 23;int...
2018-10-07 17:29:54
505
原创 LeetCode(101):对称二叉树
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3说明:如果你可以运用递归和迭代两种方法解...
2018-10-04 17:38:49
319
转载 C++ STL迭代器失效情况总结
本文转自:https://www.cnblogs.com/Commence/p/7526421.html1.对于序列式容器:vector,queue(C++的序列式容器有vector、deque、list、forward_list、array和string几种)等,序列式容器就是数组式容器,删除当前的iterator会使得后边所有元素的iterator都失效。这是因为其使用了连续分配的内存,阐...
2018-10-03 22:13:16
485
转载 C++中extern “C”含义深层探索
之前做很多项目,都用到了extern “C”,这里整理一下extern “C”的作用。本文转自:http://www.cppblog.com/Macaulish/archive/2008/06/17/53689.html1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容...
2018-10-03 21:13:16
174
转载 C++ Primer 总结
收藏C++ Primer 总结,西电硕,大佬精髓帖子。很好https://blog.youkuaiyun.com/misayaaaaa/article/details/53786215
2018-10-03 16:21:51
331
原创 计算机图形学基础-直线扫描转化算法
前言:在数学上,直线上的点有无穷多个。担当在计算机光栅显示器屏幕上表示这条直线时需要做一些处理。为了在光栅显示器上用这些离散的像素点逼近这条直线,需要知道这些像素点的x,y坐标。求出过p0,p1的直线段方程:y=kx+b; k=(y1-y0)/(x1-x0)(x1 ≠ x0)假设x已知,即从x的起点x0开始,沿x方向前进一个像素(步长=1),可以计算出相应的y值。因为像素的坐标...
2018-10-03 11:44:19
3220
转载 C++如何实现只能动态分配类对象,不能定义类对象
动态分配类对象:就是使用运算符new来创建一个类的对象,在堆上分配内存。静态分配类对象:就是A a,由编译器创建类对象,在栈上分配内存。1)动态分配类对象把类的构造函数和析构函数设为protected属性。类对象不能访问,但是派生类可以继承,也可以访问。同时,创建create和destroy两个函数,用于创建类对象。(create函数设为static,原因是,创建对象的时候A ...
2018-09-27 00:18:34
575
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人