自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CRTP, C++的奇异递归模板

通常的继承关系中,多态是通过虚函数实现的,但虚函数会带来一些运行时开销,因为它们需要通过虚函数表(vtable)进行动态分派。而 CRTP使用模板基类来实现多态行为, 则是在编译时就确定了派生类的方法,因此可以避免这种开销。

2024-09-16 01:41:36 238

原创 cmake编译grpc出现问题(Error in configuration process,project files may beinvalid) 以及怎么用virtual stdio配置grpc

接下来配置库路径, 在链接器常规选项下,点击附加库目录,添加我们需要的库目录D:\AAAA\warehouse\grpc\third_party\re2\Debug。我的是报错找不到c编译器,那么我们就可以在config构建的时候,选择。首先我们要配置grpc头文件包含的目录:(注意要用绝对路径)

2024-09-12 00:17:22 1798

原创 C++ shared_from_this详解以及实际用途

我们也可以省略auto self =shared_from_this(),在捕获列表写【self=shared_from_this】。如果不用shared_from_this,那就是在捕获列表直接捕获this,如果在执行异步操作之前,HttpMgr管理者类被销毁了,那么捕获的this指针还试图操作内存,那么就肯定会引发问题。,指向当前对象,增加了引用计数,这样就解决了上面的问题。有人有疑惑用&this也就是捕获引用可不可以,其实是不可以的,因为self是个局部变量。

2024-08-25 22:56:28 385

原创 C++模板化单例类

如果你需要为不同类型的对象实现单例,而没有使用模板化设计,那么你可能需要为每个类型都实现一个单例类,这会导致大量重复代码。另外,由于new底层分配内存的操作(先分配内存,然后调用构造函数构造对象),在多线程环境下,可能会遇到这样的情况:线程A正在执行。这种方式也是既安全又节约资源的,但是静态局部变量的生命周期直到程序结束,因此可能导致实例的销毁时间较长,尽管如此,与双重检查锁定加。相比,静态局部变量法没有额外的性能开销,它只在第一次调用时进行初始化,并且之后不会再进行额外的检查,是更推荐的选择。

2024-08-25 18:28:23 419

原创 在vs中配置boost库,json库

1.首先创建一个cpp项目2.然后点开视图->其他窗口->属性管理器3.如果环境是Debug|x64,就右键Debug|x64添加新项目属性表4.找到VC++目录,然后找到包含目录,把整个boost库的路径添加进去,然后配置库目录,把lib的路径添加进去,配置好之后,点击应用,然后点击确定。5.最后随便找个程序测试一下,如果可以运行就说明配置的没问题。

2024-08-25 03:30:12 433

原创 c++11实现同步、异步线程池

关于worker函数和manager函数的实现,代码注释已经解释的很清楚了,我就不多说了,最后测试的时候发现,管理者线程销毁线程的时候,结果并非预期。F是一个可调用对象,Args是可变参数,addTask的参数是万能引用,返回值是->指向的东西,也就是一个future对象,future内部类型是我们用result_of推导出来的结果,也就是任务函数的结果的类型,把它简化命名为returnType,然后用包装器把一个返回值为returnType,参数为Args的函数也就是任务函数包装成pkg,

2024-08-14 17:05:02 1685

原创 c++ lambda表达式的注意事项

但是加上const之后,发现报错了,明明捕获的是a的副本,但是为什么还会报错呢?执行lambda表达式,发现报错,原因是:默认情况下,lambda 表达式是。这意味着你不能在 lambda 内部修改捕获的变量。当加上mutable关键字,就可以改变捕获的变量。修饰符的影响是对整个变量的,当你捕获一个。变量时,即使是副本,这个副本也具有。

2024-08-14 15:55:21 268

原创 c++并发编程(异步)

我们定义两个函数,分别为mythread,和mythread2:先看mythread就行,第一个参数是primise用来储存返回值,第二个参数是整型值再看主函数,启动了mythread,注意第二个参数promise对象不允许复制,必须是指针或者引用(),而且我们也希望把结果储存到这个对象本身而不是复制的副本中。然后我们通过get_future获得返回值,要注意的future对象也不能被复制,而且也不能用引用传值(future),一般通过move(移动语义)来传递。

2024-08-14 04:07:34 2112 2

原创 c++左值右值,万能引用以及完美转发

引用折叠是 C++ 中处理引用类型推导的规则。

2024-08-13 18:19:52 693

原创 c++多线程编程中的虚假唤醒

以编写线程池为例,首先定义了任务队列(m_tasks),存放任务(function包装的函数指针),有多个worker线程执行worker函数,需要从任务队列取出任务,这时候就需要加锁判断任务队列是否有任务,假设任务队列添加一个任务我们使用notify_all唤醒阻塞的子线程时,这时候所有子线程都解除阻塞,如果一个子线程取走了任务,这时候任务队列如果没有任务的情况下,其他的子线程依然尝试从任务队列取任务,就是虚假唤醒(任务队列无任务,子线程仍然被唤醒去取任务)。

2024-08-12 18:57:30 260

原创 解决 C++ 项目中 Protobuf 库链接问题的方案

只需要把下面的注释掉,替换为这三行就可以。

2024-07-25 21:25:04 415

原创 在Clion上配置Linux开发环境

5.最后一步,右键项目,然后点击部署,然后点击上传到刚才的远程主机,就可以把本地代码同步到远程Linux系统。因为用的环境都是远程Linux的,所以要确保连接的Linux有这些必要的工具:cmake等,没有的话下载一下就行。3.第三步,配置cmake,因为默认的是本地debug,我们需要远程调试,所以需要添加个新的,这里我其名为remote_debug。然后把工具链选择刚刚配置的远程主机。4.第四步,点击部署,这里的根路径就是浏览远程Linux的根目录,配置完成后可以点击测试连接。

2024-07-25 18:12:44 921

空空如也

空空如也

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

TA关注的人

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