
C++深入
文章平均质量分 83
阿_波_
这个作者很懒,什么都没留下…
展开
-
c++中的类型转换以及explicit关键字
写在前面在没有深入接触c++之前,只是简单的知道变量存在自动转换和强制转换,比如,int a = 3.3;同样也可以对类对象进行自动类型转换以及强制类型转换类型转换使用《c++ primer plus》中的例子:/*Stonewt.h文件*/#ifndef STONEWT_H_#define STONEWT_H_namespace STONE{ class S...原创 2018-12-19 22:31:56 · 480 阅读 · 0 评论 -
C++中自定义简单内存配置器
目录写在前面参考程序第一版本第二版本第三版本参考文献写在前面通过C++中内存分配的几种方式我们知道,如果我们要使用自己定义的内存配置器,需要我们重载operator new、operator delete、operator new[]、operator delete[]四个函数,但是前面的我们通过模拟内部实现来进行的,这里我们将重新定义其内存配置方式,程序均参考于书...原创 2019-02-14 09:46:33 · 584 阅读 · 0 评论 -
c++ Variadic Templates(可变参数列表)
写在前面在c++11中新引入了Variadic Templates(可变参数列表),和initialize_list不同的是,Variadic Templates可以支持不同类型的参数,而initialize_list只支持同一种类型的参数,并且在vector、max等容器或者函数中内部已经实现了initialize_list,那么Variadic Templates的用法更加广泛,其中体现最...原创 2019-02-17 21:59:43 · 1141 阅读 · 0 评论 -
unordered_set,unordered_map中自定义hashfunction
写在前面在c++11新标准中引入了unordered_set以及unordered_map,其背后是根据hash实现,而set、map等背后是根据RB_tree实现,在实现hash时,需要将数据转换为对应的hash码,放入对应的bucket中,所以这里的hash function是至关重要的简单的hash function我们可以通过hash_function()函数得到对应的hash...原创 2019-02-22 11:50:05 · 3836 阅读 · 0 评论 -
C++中内存分配的几种方式
目录写在前面函数解释malloc/free函数new/delete函数array new/delete函数::operator new/delete函数new整体流程delete整体流程operator new/delete的重载写在前面C++中内存分配十分重要,并且容易造成内存泄露等等问题,之前只是知道new和delete底层调用的是malloc和fr...原创 2019-02-09 15:50:12 · 4007 阅读 · 0 评论 -
c++11 左值右值
目录写在前面 栗子左值右值std::move:强制转化为右值参考文献写在前面在c++2.0之前存在着Big Three,分别是析构函数、拷贝构造函数、拷贝赋值函数A(const A&);A &operator(const A&);~A();在c++2.0之后新增了移动语义,所以也就新增了,移动构造函数,移动赋值函数A(A&am...原创 2019-02-09 09:34:47 · 345 阅读 · 0 评论 -
c++11多线程中的condition_variable(条件变量)
目录写在前面解析wait函数wait_for函数wait_until函数notify_one函数notify_all函数栗子参考书籍写在前面condition_variable条件变量可以阻塞(wait、wait_for、wait_until)调用的线程直到使用(notify_one或notify_all)通知恢复为止首先要知道condition_v...原创 2019-01-09 21:56:52 · 9670 阅读 · 5 评论 -
c++11中的lambda表达式
写在前面在c++11多线程中,第一次接触到lambda表达式。利用Lambda表达式,可以方便的定义和创建匿名函数解析lambda完整的表达形式为:[ capture ] ( parameters ) mutable -> return-type { statement }[capture]表示捕获列表,捕获列表一定要出现在lambda表达式开始处,编译器根据[]判断后...原创 2019-01-09 16:50:46 · 798 阅读 · 0 评论 -
c++11初始化列表(initializer_list)
目录写在前面详述initializer_list部分源码方法使用参考文献 写在前面c++11标准中,initializer_list对于标准库的编写影响非常大,说一个简单的例子,在c++11之前,max函数的源程序是这样的:template <class T> const T& max (const T& a, const T&...原创 2019-01-18 18:38:22 · 9082 阅读 · 0 评论 -
c++11多线程中的互斥量
写在前面在多线程程序中互斥量的概念十分重要,要保护线程之间的共享数据,互斥量的lock、unlock、try_lock函数,以及类模板lock_guard、unique_lock十分重要栗子首先先看一下,没有再共享数据上做任何保护的程序:#include <iostream>#include <string>#include <thread>...原创 2019-01-01 16:10:18 · 782 阅读 · 0 评论 -
c++11多线程中的std::async异步函数
目录写在前面解析future类成员函数wait_for以及wait_until返回值类型get函数valid函数wait_for函数std::launch类型参考博客写在前面如果有一个需要长时间运算的线程,需要计算出最终的有效值,但是现在不迫切需要这个数值,如果我们使用std::thread的话,着一定是不可行的,因为std::thread不可以接收返回...原创 2019-01-10 22:12:26 · 4323 阅读 · 1 评论 -
c++11中多线程中Join函数
写在前面Join函数作用: Join thread The function returns when the thread execution has completed.//直到线程完成函数才返回 This synchronizes the moment this function returns with the completion of all the ope...原创 2018-12-31 15:40:35 · 4245 阅读 · 0 评论 -
C++11多线程thread参数传递问题
目录写在前面thread类的构造函数join函数detach函数thread中参数传递类对象作为参数类中函数作为参数参考书籍写在前面多线程在很多地方都是必须要掌握的方法,这里先说一下,thread对象的参数传递问题thread类的构造函数thread() noexcept; //default constructor 其中noexc...原创 2018-12-31 12:01:51 · 37696 阅读 · 6 评论 -
设计模式_单例模式
写在前面在学习c++多线程的时候,其中有一节是在单例模式中实现数据共享,所以这里先来看一下设计模式中的单例模式的实现《设计模式 可复用面相对象软件的基础》中说道,SINGLETON模式的意图为:保证一个类仅有一个实例,并提供一个访问它的全局访问点。优点:a)对唯一对象的受控访问 因为类只包含一个对象,所以它可以严格控制客户怎样以及何时访问它b)缩小名空间 Singleton...原创 2019-01-03 22:10:37 · 233 阅读 · 0 评论 -
C++中的命名空间namespace详解及细节参考
名称空间特性c++中要求可以通过定义一种新的声明区域来创建命名空间,这样目的之一就是提供一个声明名称的区域。一个名称区域中的名称不会与另外一个名称空间的相同名称发生冲突,同时允许程序中的其他部分使用该名称访问空间中声明的东西使用namespace建立命名空间的栗子:namespace Jack{ double a; void fetch(); struct ...原创 2018-12-17 18:17:36 · 959 阅读 · 0 评论 -
C++中的new_handler、set_new_handler、get_new_handler函数
写在前面在operator new或者operator new[]内存分配失败时,会不止一次调用由client指定的handler(当然handler也有默认形式),可以有源码中发现void* operator new(size_t size,const std::nothrow_t&)_THROW0(){ void* p; while((p==malloc(size))=...原创 2019-02-14 11:40:41 · 1057 阅读 · 0 评论