随笔分类 -  c/c++

摘要:单例模式: 在实现单例模式之前需要先了解一下静态(全局/局部)变量的初始化方式: 全局变量、non-local static 变量(文件域的静态变量和类的静态成员变量)在main执行之前就已分配内存并初始化;local static 变量(局部静态变量)同样是在 main 前就已分配内存,第一次使用 阅读全文
posted @ 2018-03-24 19:50 geloutingyu 阅读(207) 评论(0) 推荐(0)
摘要:单一职责原则: 就一个类而言,应该仅有一个引起它变化的原因。 如果一个类承担的职责过多,就等于把这些职责耦合在一起, 一个职责的变化可能会削 弱或者抑制这个类完成其它职责能力。这种耦合会导制脆弱的设计,当变化发生时,设计会 遭受到意想不到的破坏 如果你能够想到多于一个的动机去改变一个类,那么这个类就 阅读全文
posted @ 2018-03-14 20:39 geloutingyu 阅读(303) 评论(0) 推荐(0)
摘要:条件变量是允许多个线程相互交流的同步原语。它允许一定量的线程等待(可以定时)另一线程的提醒,然后再继续。条件变量始终关联到一个互斥 定义于头文件 <condition_variable> condition_variable: condition_variable 类是同步原语,能用于阻塞一个线程, 阅读全文
posted @ 2018-03-14 20:36 geloutingyu 阅读(390) 评论(0) 推荐(0)
摘要:题目1:子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码 代码1: 1 #include <iostream> 2 #include <thread> 3 #include <mutex> 4 using 阅读全文
posted @ 2018-03-14 19:58 geloutingyu 阅读(2963) 评论(0) 推荐(1)
摘要:以下内容整理自:https://www.cnblogs.com/my_life/articles/5401190.html future 是一个能从其他地方获取到一个值的对象,如果是在不同的线程中,则被synchronizing properly. std::condition_variable 可 阅读全文
posted @ 2018-03-13 21:15 geloutingyu 阅读(982) 评论(0) 推荐(0)
摘要:整理自:zh.cppreference.com/w/cpp/thread 互斥锁 互斥算法避免多个线程同时访问共享资源。这会避免数据竞争,并提供线程间的同步支持。定义于头文件 <mutex> 互斥锁有可重入、不可重入之分。C++标准库中用 mutex 表示不可重入的互斥锁,用 recursive_m 阅读全文
posted @ 2018-03-10 21:46 geloutingyu 阅读(3181) 评论(0) 推荐(0)
摘要:整理自:zh.cppreference.com/w/cpp/thread std::this_thread::yield: 定义于头文件 <thread> 函数原型:void yield() noexcept; 此函数的准确性为依赖于实现,特别是使用中的 OS 调度器机制和系统状态。例如,先进先出实 阅读全文
posted @ 2018-03-10 13:45 geloutingyu 阅读(754) 评论(0) 推荐(0)
摘要:以下整理自:https://www.2cto.com/kf/201404/290706.html chrono 库主要包含了三种类型:时间间隔 Duration、时钟 Clocks 和时间点 Time point duration: duration 表示一段时间间隔,用来记录时间长度,可以表示几秒 阅读全文
posted @ 2018-03-08 17:19 geloutingyu 阅读(4035) 评论(0) 推荐(0)
摘要:定义、实例化函数模板: 对于函数体完全相同,唯一差异就是参数类型的情况,我们可以定义一个通用的函数模板,而非为每个类型都定义一个新函数: 1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 template <ty 阅读全文
posted @ 2018-02-27 23:22 geloutingyu 阅读(467) 评论(0) 推荐(0)
摘要:当存在继承关系时,派生类的作用域嵌套在其基类的作用域之内。如果一个名字在派生类的作用域内无法正确解析,则编译器将继续在外层的基类作用域中寻找该名字的定义 在编译时进行名字查找: 一个对象、引用或指针的静态类型决定了该对象的哪些成员是可见的,即使静态类型与动态类型不一致: 1 #include <io 阅读全文
posted @ 2018-02-24 15:45 geloutingyu 阅读(597) 评论(0) 推荐(0)
摘要:通常情况下,如果我们不适用某个函数,则无需为该函数提供定义。但我们必须为每个虚函数都提供定义而不管它是否被用到了,这因为连编译器也无法确定到底会适用哪个虚函数 对虚函数的调用可能在运行时才被解析: 当某个虚函数通过指针或引用调用时,编译器产生的代码直到运行时才能确定应该调用哪个版本的函数。被调用的函 阅读全文
posted @ 2018-02-18 21:43 geloutingyu 阅读(558) 评论(0) 推荐(0)
摘要:面向对象程序设计基于三个基本概念:数据抽象,继承和动态绑定 数据抽象是一种依赖于接口和实现分离的编程技术。继承和动态绑定对程序的编号有两方面的影响:一是我们可以更容易地定义与其它类相似但不完全相同的类;二是在使用这些彼此相似的类编写程序时,我们可以在一定程度上忽略掉它们的区别。 在 c++ 语言中, 阅读全文
posted @ 2018-02-17 22:32 geloutingyu 阅读(509) 评论(0) 推荐(0)
摘要:在对象拷贝后就立即被销毁的情况下,移动而非拷贝对象会大幅度提升性能。以及像 IO 类或 unique_ptr 这样的类,包含不能被共享的资源,不能拷贝但可以移动。而标准库容器、string 和 shared_ptr 类既支持移动也支持拷贝 右值引用: 右值引用是 c++11 为了支持移动操作引入的。 阅读全文
posted @ 2018-02-11 21:50 geloutingyu 阅读(460) 评论(1) 推荐(0)
摘要:为了定义拷贝构造函数和拷贝赋值运算符,我们首先必须确认此类型对象的拷贝语义。通常可以定义拷贝操作,使类的行为看起来像一个值或者像一个指针(即所谓的深拷贝和浅拷贝) 类的行为像一个值,意味着它应该也有自己的状态。当我们拷贝一个像值的对象时,副本和原对象是完全独立的。改变副本不会对原对象有任何影响,反之 阅读全文
posted @ 2018-02-05 23:38 geloutingyu 阅读(309) 评论(0) 推荐(0)
摘要:拷贝控制操作即对象的拷贝,移动,赋值和销毁。一个类通过拷贝构造函数,拷贝赋值运算符,移动构造函数,移动赋值运算符和析构函数来完成这些工作。拷贝和移动构造函数定义了当用相同类型的另一个对象初始化本对象时做什么。拷贝和移动运算符定义了将一个对象赋予同类型的另一个对象时做什么。析构函数定义了当此类型对象销 阅读全文
posted @ 2018-02-05 16:52 geloutingyu 阅读(663) 评论(0) 推荐(0)
摘要:在 c++11 中提供了两种一次分配一个对象数组的方法。其一是使用一种 new 表达式语法,其二是使用一个名为 allocator 的类。虽然通常我们更希望用容器来代替数组(使用容器的类可以使用默认版本的拷贝、赋值和析构操作。分配动态数组的类则必须定义自己版本的操作,在拷贝、复制以及销毁对象时管理所 阅读全文
posted @ 2018-02-02 16:13 geloutingyu 阅读(434) 评论(0) 推荐(0)
摘要:静态内存用来保存局部 static 对象、类 static 数据成员 以及任何定义在函数之外的变量。栈内存用来存储定义在函数内部的非 static 对象。分配在静态或栈内存中的对象由编译器自动创建和销毁。对于栈对象,仅在其定义的程序块运行时才存在;static 对象在使用之前分配,在程序结束时销毁。 阅读全文
posted @ 2018-01-31 20:10 geloutingyu 阅读(553) 评论(0) 推荐(0)
摘要:关联容器和顺序容器有着根本的不同:关联容器中的元素是按关键字来保持和访问的。与之相对,顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的。和顺序容器一样的是,关联容器也是模板 关联容器类型: 按关键字有序保存元素 map 关联数组:保存关键字-值对 set 关键字即值,即只保存关键字的容器 m 阅读全文
posted @ 2018-01-29 14:39 geloutingyu 阅读(322) 评论(0) 推荐(0)
摘要:除了为每个容器定义的迭代器之外,标准库在头文件 iterator 中还定义了额外几种迭代器。这些迭代器包括以下几种: 插入迭代器:这些迭代器被绑定到一个容器上,可用来向容器插入元素 流迭代器:这些迭代器被绑定到输入或输出流上,可用来变量所有管理的 IO 流 反向迭代器:这些迭代器向后而不是向前移动。 阅读全文
posted @ 2018-01-25 20:35 geloutingyu 阅读(453) 评论(0) 推荐(0)
摘要:lambda 表达式: Lambda表达式完整的声明格式如下: 各项具体含义如下: 我们这里先不讨论 exception 我们可以忽略参数列表和返回类型,但必须永远包含捕获列表和函数体: 1 #include <iostream> 2 using namespace std; 3 4 int mai 阅读全文
posted @ 2018-01-24 22:18 geloutingyu 阅读(4261) 评论(0) 推荐(0)