自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

阿飞博客

共享世界

  • 博客(35)
  • 收藏
  • 关注

原创 c++代理类

代理类

2022-12-31 21:53:03 886 1

原创 C++类设计的核查表

设计一个C++类的时候需要一个核查表,提醒怎么设计好一个类。

2022-12-27 22:45:46 206

原创 Git 常用命令

Git 常用命令仓库在当前目录新建一个Git代码库$ git init新建一个目录,将其初始化为Git代码库$ git init [project-name]下载一个项目和它的整个代码历史$ git clone [url]配置显示当前的Git配置$ git config --list编辑Git配置文件$ git config -e [--global]设置提交代码时的用户信息$ git config [--global] user.name "[name]"$ git

2021-09-08 22:51:14 164

原创 C++ 面试知识点总结

目录关键字`static`:控制变量的存储方式和可见性`const`:常量限定符,告知编译器该变量是不可修改的`extern`: 外部变量/函数声明引用`volatile`:易变的`sizeof`:判断数据类型或表达式长度的运算符基础语法常见问题1. 堆和栈的区别2. 数组和指针的区别3. 全局变量和局部变量的区别4. 空指针和悬垂指针的区别5. `sizeof` 与 `strlen` 的区别6. `const` 和 `#define` 的区别7. 文件包含用中括号和引号的区别8. 指针(*)与引用(&am

2021-09-01 22:28:38 2220

原创 gtk新手入门须知

##Gtk 新手入门须知#####参考网站###官网下载:GTK(window+linux)官网参考文档:GTK 3.0 (重点参考demo)Linux自定gtk2.0,安装gtk3.0后指定库版本。编译命令:gcc gtk_example.c -o gtk_example `pkg-config --libs --cflags gtk+-3.0`较大工程建议采用cmake构建工具###基本要素###界面设计采用glade工具进行图形化设计,生成’.glade’后缀文件,通过gtkbuild

2020-06-26 11:36:53 477

原创 Qt: The Meta-Object System

Qt的Meta-Object 系统提供了信号-槽机制,用于对象之间的通讯,运行类型信息和动态属性系统。Meta-Object基于以下三件事:QObject类提供了一个对象能够利用Meta-Object系统的基类;Q_OBJECT宏在类声明的私有部分,被用来使能Meta-Object特性,例如动态属性,信号槽;Meta-Object Compiler(moc)提供给每个QObject子类需...

2019-11-08 20:48:45 156

原创 Data 语意学

class X {};class Y : public virtual X {};class Z : public virtual X {};class A : public virtual Z {};sizeof(X) // result 1sizeof(Y) // result 8sizeof(Z) // result 8sizeof(A) // result 12空的cla...

2019-10-20 11:05:44 210

原创 成员们的初始化队伍

必须使用member initialization list的四种情况:当初始化一个reference member时;当初始化一个const member时;当调用一个base class的constructor,而它拥有一组参数时;当调用一个member class的constructor,而它拥有一组参数时。class Word { string _name; ...

2019-10-19 18:44:03 162

原创 编译器优化

X bar(){ X xx; //...处理xx return xx;}所有的return指令传回相同的具名数值(xx),因此编译器可能自己做优化,方法是以result参数取代named return value(NRV)。编译器把其中的xx以_result取代:void bar(X& _result) { // default construc...

2019-10-17 21:52:23 294

原创 程序员优化

X bar(const T& y, const T& z){ X xx; ... return xx;}那会要求xx被“memberwise”地拷贝到编译器所产生的_result之中,如下。// 可能转换的伪码void bar(X& _result, const T& y, const T& z){ X xx;...

2019-10-17 20:35:35 220

原创 程序转化语意学

显示的初始化操作X x0;void foo_bar(){ X x1(x0); X x2 = x0; X x3 = X(x0);}重写每一个定义,其中的初始化操作会被剥除;(“定义”严格来讲是“占用内存”的行为)class 的 copy constructor会被安插进去。// 可能转换的伪码void foo_bar(){ X x1; //定义...

2019-10-17 20:09:14 141

原创 Copy Constructor 的构造操作

以一个object的内容作为另一个class object的初值的三种情况:对一个object做显式的初始化操作; class X{};X x; X xx = x;当object被当做参数交给某个函数 extern void foo(X x); void bar() { X xx; foo(xx);…}当函数传回一个class object时 X foo_bar() {X xx; …ret...

2019-09-22 20:30:36 218

原创 Bitwise Copy Semantics

Bitwise Copy Semantics (位逐次拷贝)#include "Word.h"Word noun("book");void foo(){ Word verb = noun; ... }如果Word没有定义explicit copy constructor,那么是否会有一个编译器合成的实例被调用?这的看该Word是否展现“bitwise copy ...

2019-09-22 16:55:16 594

原创 如果有多个class member objects 都要求constructor初始化操作,将如何?

C++语言要求以“member objects 在class中的声明顺序”来调用各个constructors。这一点由编译器完成,它为每一个constructor安插程序代码,以“member声明顺序”调用呢每一个member所关联的default constructors。这些代码将安插在explicit user code之前。举个例子class Dopey { pulic:Dopey();...

2019-09-21 19:45:19 165

原创 Default Constructor 的构造操作

当编译器需要的时候,而不是程序员需要(初始化为0的操作),一个nontrivial default constructor就是编译器所需要的那种,必要的话由编译器合成出来。nontrivial default constructor 的4种情况:1. “带有Default Constructor”的Member Class Object如果一个class 没有任何constructor,...

2019-09-21 19:43:35 305

原创 在C++各个不同的编译模块中,编译器如何避免合成出多个default constructor呢?

在C++各个不同的编译模块中,编译器如何避免合成出多个default constructor(比如说一个是为A.C文件合成,另一个是为B.C文件合成)呢?解决方法是把合成的default constructor、copy constructor、destructor、assignment copy operator都以inline方式完成。一个inline函数有静态链接是(static link...

2019-09-21 19:40:16 142

原创 C++程序设计模型直接支持三种programming

C++程序设计模型直接支持三种programming程序模型(面向过程):就像C一样,C++当然也支持它;抽象数据类型模型(ADT abstract data type model 如今称之为OB object-based):所谓的“抽象”是和一组表达式(public 接口)一起提供的,那时其运算定义仍然隐而未明。例如string;面向对象模型(OO object-oriented mod...

2019-09-21 19:39:02 475

原创 一个class object需要多少内存

其non-static data members的总和大小;加上任何由于alignment的需求而填报padding上去的空间(可能存在于members之间,也可能存在于集合体边界);加上为了支持virtual而由内部产生的任何额外负担overhead。...

2019-09-21 19:37:31 189

原创 多态的主要用途

多态的主要用途是经由一个共同的接口来影响类型的封装,这个接口通常被定义在一个抽象的base class中。这个共享接口是以virtual function机制引发的,它可以在执行期根据object的真正类型解析出到底哪一个函数实例被调用。这不只使得“当类型有所增加、修改或删减时,我们的程序代码无须改变”,而且也使一个新的subtype的供应者不需要重新写出“对继承体系中的所有类型都共通”的行为和操...

2019-09-21 19:36:50 1168 1

原创 c++以下列方法支持多态

经由一组隐式的转换操作。例如把一个derived class 指针转化为一个指向其public base type的指针:Shape* ps = new Circle();经由virtual function机制:ps->rotate();经由dynamic_cast 和typeid运算符if (Circle pc = dynamic_cast<Circle>(ps)...

2019-09-21 19:34:28 143

原创 C++对象模式

class Point {public: Point(float xval); virtual ~Point(); float x() const; static int PointCount();protected: virtual ostream& print(ostream &os) const; float...

2019-09-21 19:30:48 268

原创 加上封装后的布局成本

member function虽然含在每个class object之内,却不出现在object之中。每一个non-inline member function只会诞生一个函数实例。inline function则会在其每一个使用者(模块)身上产生一个函数实例。(函数体的替换)封装并未带来任何空间或执行期的不良后果。C++在布局以及存取时间上的主要的额外负担是由virtual引起的,包括:1...

2019-09-21 19:19:20 136

原创 C++异常:禁止异常消息传递到析构函数外

两种情况下会调用析构函数:1.正常情况下删除对象,例如对象超出作用域或被显得delete;2.异常传递的堆栈辗转开解(stack-unwinding)过程中,由异常处理系统删除一个对象。在析构函数使用try-catch捕获异常,禁止异常消息传递到析构函数外,两原因:1.能够在异常传递的堆栈辗转开解(stack-unwinding)过程中,防止terminate被调用;2.能帮助确保析构函...

2019-03-05 22:52:08 197

原创 C++异常:在构造函数防止资源泄露

11

2019-03-05 22:28:20 170

原创 C++必须在初始化列表初始化的情况

const成员变量;成员变量是引用;成员对象只有带参数的构造函数;基类只有带参数的构造函数;

2019-03-05 21:54:15 298

原创 C++异常:使用析构函数防止内存泄露(智能指针的析构函数)

利用智能指针的思想:用一个对象存储需要被自动释放的资源,然后依靠对象的析构函数来释放资源。这种思想不只是可以运用在指针上,还能用在其它资源的分配和释放上。...

2019-02-28 22:33:29 1330

原创 C++ 异常

C++引进的异常机制给C++带来了深刻的改变,

2019-02-27 23:05:52 101

原创 使用raw指针和make_shared创建shared_ptr对象,优先使用make_shared,unique_ptr也一样

先介绍不能使用make_shared的场景:1.当你需要定制一个删除器,例如采用shared_ptr管理非内存资源或者一个分配在非标准内存区域的对象。这时候不能使用make_shard,它不支持指定删除器;2.当你正在采用其他代码产生的raw指针(指向你需要处理的对象),直接采用raw指针构造share_ptr对象。更适合使用make_shared的原因是:1.用起来更清晰,准确;2.效率比直接...

2018-09-02 20:28:55 1163

原创 智能指针:shared_ptr和unique_ptr,优先使用unique_ptr

智能指针是比raw 指针更智能的类,解决 dangling指针或多次删除被指向对象,以及资源泄露问题,通常用来确保指针的寿命和其指向对象的寿命一致。智能指针虽然很智能,但容易被误用,智能也是有代价的。通常有两大类型的智能指针:独占式unique_ptr和共享式shared_ptr。这两者的区别和使用场景,更适合使用unique_ptr的场景:1.语义简单,即当你不确定使用的指针是不是被分享所有权...

2018-09-02 20:10:04 5110

原创 解决:ASSERT failure in QWidget: “Widgets must be created in the GUI thread.“

这类错误是因为Qt规定了UI主线程只有一个,在另外一个线程生成UI相关对象或对对其进行相关操作,例如QWidget或其子类的构造和相关操作,都会出现此断言错误 。 解决方法是:通过信号槽实现线程通讯方式,在非UI主线程发生个信号,让UI主线程调用槽函数进行相关的界面操作。connect连接方式是QueuedConnection...

2018-08-31 22:31:53 13339 1

原创 解决:QObject::connect queue arguments of type ‘xxxx’,Make sure ‘xxxx’ is registered using qRegister

解决方法:在调用connect之前,通过 qRegisterMetaType() 注册你connect函数里对象的类型代码如下: typedef QString CustomString;//你自己定义的类型 qRegisterMetaType&amp;lt;CustomString&amp;gt;(“CustomString”);//注册你自己的类型 connect(…)//之后connect...

2018-08-31 21:51:25 2887

原创 解决:QWidget: Must construct a QApplication before a QWidget

Do you have any static QWidgets in your application? Static objects are instantiated before main gets control.

2018-08-21 13:34:52 16563 5

原创 解决:VS2015 + Qt 提示 There‘s no Qt version assigned to this project for platform Win32

设置问题,项目右键菜单, 选择 “Qt Project Settings” ,会显示如图的框:将最后一个 Version字段, 选择指定的Qt 版本即可。

2018-04-28 09:23:53 8743

原创 解决:could not find or load the Qt platform plugin “windows“

QT安装目录下找到platforms 文件夹,复制到.exe目录下

2018-04-28 09:20:14 956

原创 解决:在VS配置,生成MOC.cpp文件,解决link。。。unsolved meta问题

在VS中设置,这样每次编译自动生成:1.在solutionexplorer窗口中,右击要生成moc文件的头文件,选择"Properties";2.弹出的窗口左边,"ConfigurationProperties"下面点击"General",将右边第二行的ItemType后面内容改成"CustomBuildTool";3.这时候左边会新出现一栏"Custom...

2018-04-02 17:16:31 840

空空如也

空空如也

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

TA关注的人

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