自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (1)
  • 收藏
  • 关注

原创 Qt — Graphics/View框架

Qt的Graphics/View框架被用来存放、显示二维图形元素,处理那些对图形元素进行操作的交互命令。Qt 应用程序的图形界面包含各种控件,比如窗口、按钮、滚动条等。所有这些控件对象都具有一个共同的基类QWidget。一个QWidget对象是构成图形界面的基本单位。它能够在屏幕上绘制自己,能够处理鼠标、键盘事件。控件所占的屏幕区域总是矩形的。在屏幕上显示多个控件时会按照一定的顺序逐个显示。我们称先被显示的控件位于“底层”,后被显示的位于“顶层”。当多个控件所占区域重叠时,顶层控件会遮挡底层控件。

2023-04-23 15:00:56 1037 1

原创 qt - 隐式共享与d-pointer技术

一般情况下,一个类的多个对象所占用的内存是相互独立的。如果其中某些对象数据成员的取值完全相同,我们可以令它们共享一块内存以节省空间。只有当程序需要修改其中某个对象的数据成员时,我们再为该对象分配新的内存。这种技术被称为隐式共享(implicit sharing)。该技术被Qt库广泛使用,接下来,介绍该技术,并剖析QString的部分源代码以演示该技术的具体实现。通常情况下,与一个类密切相关的数据会被作为数据成员直接定义在该类中。

2023-04-12 17:11:59 1017

原创 标准库及Qt对字符串的处理

绝大多数C++程序都会涉及字符串的处理。字符串中的字符可能是我们很熟悉的ASCII字符,也可能是其他自然语言中的文字。为了表示这些文字,在计算机发展历史上出现了各种文字编码方案。下面介绍了各种字符编码方案,重点介绍被广泛接受的Unicode编码方案。标准C++定义了模板类来处理字符串。特化后的类string处理字符类型为char的字符串,而特化后的类wstring处理字符类型为wchar_t的字符串,后者可以用来存储Unicode编码的字符串。

2023-04-11 17:54:09 1680

转载 Wireshark解析器(Dissector)插件-Lua

Wireshark解析器(Dissector)插件-Lua

2023-03-30 15:14:05 1631

原创 cmake:MSVC,GNU解决bigobj问题

cmake:MSVC,GNU解决bigobj问题

2023-03-22 13:48:56 303

转载 COM编程攻略(七 COM跨进程组件开发实战)

COM编程攻略(七 COM跨进程组件开发实战)

2023-03-15 15:18:44 927

转载 COM编程攻略(六 COM模块的构成)

COM编程攻略(六 COM模块的构成)

2023-03-15 15:09:10 516

转载 COM编程攻略(五 使用COM API创建COM对象)

COM编程攻略(五 使用COM API创建COM对象)

2023-03-15 14:50:41 651

转载 COM编程攻略(四 COM对象创建的原理及ATL实现)

COM编程攻略(四 COM对象创建的原理及ATL实现)

2023-03-15 14:38:20 1096

转载 COM编程攻略(三 硬核ATL实现IUnknown代码解析)

COM编程攻略(三 硬核ATL实现IUnknown代码解析)

2023-03-15 14:23:48 379

转载 COM编程攻略(二 COM最基本接口 IUnknown)

上一篇说到,C++传统的局限性在于,不同编译器带来的不一致的二进制布局造成不兼容,以及接口版本更新造成布局变化的不兼容。这一篇来详细说一下,微软是如何推出COM模型解决上述问题的。

2023-03-15 11:29:00 286

转载 COM编程攻略(一 传统C++编程局限性)

然而,很多情况下,编译器可以选择自己的实现方式,只要能达到static_cast的效果就可以了,并不能保证各个编译器下的对象模型都是一致的,类似的还有dynamic_cast,规范中并没有对实现进行约束,那么出现跨越调用边界(exe和dll相互调用)的情况,由于编译器的差异,也有可能会出现问题。在dll中,Foo的大小变成了8个字节,在其内部可正常运作,但是可执行文件并不知道这个dll的布局发生了变化,仍然按照4个字节的大小来访问Foo,则会造成非常严重的后果。特别说明 —— 该系列文章皆转自知乎作者。

2023-03-15 10:58:54 221

原创 IO多路复用

IO多路复用

2023-02-21 18:17:03 508

原创 软件架构模式

对于开发人员来说,在没有正规架构的情况下开始编写应用程序是很常见的。如果没有清晰且定义良好的体系结构,大多数开发人员和架构师通常会采用传统的分层体系结构模式(也被称为N层体系结构),将源代码模块分离到各个包中,进而形成所谓的分层。遗憾的是,这样做的结果只会得到一组没有组织的源码模块,这些模块之间缺乏清晰的角色、职责和关系。缺乏正规架构的应用程序通常是强耦合的、脆弱的、难以更改的,且没有明确的愿景或方向。因此,如果不完全理解系统中每个组件和模块的内部工作原理,就很难确定应用程序的体系结构特征。关于部署和维护

2023-02-15 18:08:15 645

原创 CHAPTER 7 The Concurrency API

c++ 11最大的成就之一是将并发性纳入语言和库中。由此产生的语言保证意味着,在c++的历史上,程序员第一次可以在所有平台上以标准行为编写多线程程序。这为构建丰富性的库奠定了坚实的基础,而STL库的并发元素(任务、未来、线程、互斥对象、条件变量、原子对象等等)仅仅是一个开始,它必将成为开发并发c++软件的一套越来越丰富的工具。模板:std::future和std::shared_future。在很多情况下,两者的区别并不重要,所以我经常简单地谈论。在接下来的条款中,请记住标准库有两个。

2023-02-10 11:34:28 62

转载 Qt实现一个隐式共享类(使用QSharedDataPointer)

Qt实现一个隐式共享类

2023-02-07 22:59:14 233

原创 进程地址空间

操作系统是软件世界的管理机构,负责以合理的方式分配软件世界中的资源。从某种程度上说,定义“进程”这个概念的一个基本动机就是更方便地组织和分配系统资源。在操作系统的管理规则中,很多资源是针对进程来分配的,必须先要有一个进程,才能为其分配资源。在Windows操作系统中,每个进程都拥有如下资源:(1),一个虚拟的地址空间;(2)(又称客户ID,Client ID),简称PID,全局唯一的;(3) 一个(image),也就是该进程的程序文件(可执行文件,exe)在内存中的表示;

2023-02-04 22:11:31 709

原创 Visual Studio IDE中,通过CMake组织源码目录

Visual Studio IDE中,通过CMake组织源码目录

2023-01-31 18:23:23 348

原创 Windows QtCredator源码启动报错:Reason: Plugin initialization failed: No themes found in installation.

Cannot load plugin because dependency failed to load: Core(4.14.2) Reason: Plugin initialization failed: No themes found in installation

2023-01-11 15:16:43 265

原创 Item 40: Use std::atomic for concurrency, volatile for special memory

区分std::atomic和volatile

2022-11-22 16:59:50 193

原创 Item 37: Make std::threads unjoinable on all paths

std::thread 对象结束时必须变成 unjoinable(不可联结)状态

2022-11-18 17:43:50 82

原创 Item 36: Specify std::launch::async if asynchronicity is essential.

如果异步是必要的,请指定std::launch::async启动策略

2022-11-17 17:30:09 54

原创 Item 35:Prefer task-based programming to thread- based.

优先选用基于任务的程序设计

2022-11-16 18:07:25 193

原创 Item 34: Prefer lambdas to std::bind

优先使用lambda表达式,而不是std::bind

2022-10-21 18:07:01 238

原创 Item 33: Use decltype on auto&& parameters to std::forward them

Item 33:Use decltype on auto&& parameters to std::forward them

2022-10-21 15:16:08 147

原创 Item 32: Use init capture to move objects into closures

使用初始化捕获将对象移入闭包

2022-10-21 11:30:54 176

原创 Item 31: Avoid default capture modes

避免默认捕获模式

2022-10-19 17:16:11 96

原创 CHAPTER 6 Lambda Expressions

Lambda 表达式

2022-10-19 14:06:12 84

原创 Item 26: Avoid overloading on universal references

避免利用万能引用类型进行重载

2022-10-18 16:18:20 96

原创 Item 25: Use std::move on rvalue references, std::forward on universal references

对右值引用使用std::move,对万能引用则使用std::forward

2022-10-17 16:27:00 54

原创 Item 24: Distinguish universal references from rvalue references

区分万能引用和右值引用

2022-10-10 17:22:13 279

原创 Item 23: Understand std::move and std::forward

理解std::move 和 std::forward

2022-10-08 16:46:50 182

原创 CHAPTER 5 Rvalue References, Move Semantics, and Perfect Forwarding

右值引用、移动语义和完美转发

2022-09-30 16:41:21 82

原创 Item 22: When using the Pimpl Idiom, define special member functions in the implementation file

使用Pimpl机制时,将特殊成员函数的定义放在实现文件中

2022-09-29 18:17:22 183

原创 Item 21: Prefer std::make_unique and std::make_shared to direct use of new

std::make_unique std::make_shared new

2022-09-16 20:51:36 382

原创 Item 20: Use std::weak_ptr for std::shared_ptr - like pointers that can dangle

使用std::weak_ptr替代可能失效的std::shared_ptr

2022-09-15 14:31:26 231

原创 Item 19: Use std::shared_ptr for shared-ownership resource management

使用std::share_ptr管理具有共享所有权的资源

2022-09-14 11:00:45 319

原创 Modern C++资源

Modern C++资源

2022-09-06 16:29:25 276

原创 Item 18: Use std::unique_ptr for exclusive-ownership resource management

使用srd::unique_ptr来管理独占所有权的资源

2022-09-04 18:45:13 180

原创 Item 17: Understand special member function generation

理解特殊成员函数的生成机制

2022-09-04 18:43:36 268

gRPC-1.32.0安装包(Debug+Release)

gRPC-1.32.0源码编译后的所有库文件和头文件,解压后,可直接集成到应用程序中

2021-01-12

空空如也

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

TA关注的人

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