摘要:
引言 委派构造函数是C++11中新增的特性,目的是为了减少书写构造函数的时间。委托构造函数可以使用当前类的其他构造函数来帮助当前构造函数初始化。换而言之,就是可以将当前构造函数的部分(或者全部)职责交给本类的另一个构造函数。 先看一个不使用委托构造函数的例子: 1 class A 2 { 3 pub 阅读全文
摘要:
引言 在继承体系中,假设派生类想要使用基类的构造函数,须要在构造函数中显式声明。但此时会伴随一个问题,假若基类拥有众多不同版本的构造函数。则在派生类中需要编写非常多相应的"透传"构造函数。例如: 1 struct A 2 { 3 A(int i) {} 4 A(double d, int i) {} 阅读全文
摘要:
问题描述 当程序运行时出现如下提示: 说明堆内存被破坏。 原因 写入操作超过了所申请的内存,造成了溢出写入。一个简单的例子说明上述情况: 1 char* ptr = new char[5]; //只申请了5个字节的内存 2 strcpy(ptr, "hello"); //向内存中写入6个字节 3 d 阅读全文
摘要:
windows操作系统为我们提供了一套底层Socket API,用于实现网络通信。在我们编写的程序中,如果需要引用该网络库,需要实现以下几步: 1、包含头文件 1 #include <WinSock2.h> 其中,头文件<WinSock2.h>表示Windows Socket 第二版,第一版为 <w 阅读全文
摘要:
等待事件或等待其他条件 坐车案例 想象一种情况:假设晚上坐车外出,如何才能确保不坐过站又能使自己最轻松? 方法一:不睡觉,时刻关注自己的位置 1 #include <iostream> 2 #include <thread> 3 #include <mutex> 4 using namespace 阅读全文
摘要:
线程间共享数据的问题 多线程之间共享数据,最大的问题便是数据竞争导致的异常问题。多个线程操作同一块资源,如果不做任何限制,那么一定会发生错误。例如: 1 int g_nResource = 0; 2 void thread_entry() 3 { 4 for (int i = 0; i < 1000 阅读全文
摘要:
在MFC中引入GDI+,步骤如下: 1、在需要用到GDI+的文件中添加GDI+文件 1 #include <gdiplus.h> 2 using namespace Gdiplus; 2、在应用程序类(CGdiplusDemoApp)中添加成员变量: 1 ULONG_PTR m_gdiplusTok 阅读全文
摘要:
分类 懒汉式:实例对象在第一次被使用时才进行初始化。 饿汉式:实例在定义时就被初始化。 特点 1、构造函数和析构函数私有化,不允许外部创建实例对象。 2、拷贝构造函数和复制运算符重载被delete,不允许产生新的实例。 3、内部定义一个私有的静态数据成员,该成员为本类的实例化对象。 4、提供公有静态 阅读全文
摘要:
线程的基本管控 每个应用程序都至少拥有一个线程,即运行main函数的线程,称为主线程,它由c++运行时系统启动。我们可以在软件运行中产生其他线程,它们以指定的函数作为入口函数。当main函数返回后,程序会退出;同样,当入口函数返回后,与之对应的线程结束。 发起线程 线程是通过构造std::threa 阅读全文
摘要:
前言 c++11开始支持多线程,使得编写c++多线程程序无需依赖特定的平台,使开发者能够编写可移植的、行为确定的多线程程序代码。 什么是并发 所谓并发,是两个或多个同时独立进行的活动。而计算机中的并发,是指同一个系统中,多个独立活动同时进行。 对于单核处理器,在同一时刻,只能处理一个任务,操作系统将 阅读全文