C++ 11

C++ 11

C++11智能指针循环引用问题

不智能的智能指针

2020-09-02
15 1

C++11:互斥量

多任务的同步与互斥,一个基于Linux下并发编程关于锁的一些介绍。相较于C++而言就是换汤不换药,主要是一些语法上的区别,集体的作用什么的看那篇博客吧,本文简单介绍一下。为什么需要互斥量  在多任务操作系统中,同时运行的多个任务可能都需要使用同一种资源。这个过程有点类似于,公司部门里,我在使用着打印

2020-07-29
45 0

C++11:线程

  在 C++ 11 之前,C/C++ 一直是一种顺序的编程语言。顺序是指所有指令都是串行执行的,即在相同的时刻,有且仅有单个 CPU 的程序计数器执行代码的代码段,并运行代码段中的指令。而 C/C++ 代码也总是对应地拥有一份操作系统赋予进程的包括堆、栈、可执行的(代码)及不可执行的(数据)在内的

2020-07-29
37 0

C++11:lambda表达式

lambda基础使用  lambda表达式(lambdaexpression)是一个匿名函数,lambda表达式基于数学中的λ演算得名。C++11中的lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。lambda表达式的基本构成:[capturelist](paramslist)mut

2020-07-28
34 0

C++11:智能指针

  在C++98中,智能指针通过一个模板类型auto_ptr来实现。auto_ptr以对象的方式管理堆分配的内存,并且在适当的时间(比如析构),释放获得的堆上的内存。这种堆内存管理的方式只需要程序员将new运算符操作返回的指针作为auto_ptr的初始值计科,不去要在显示的调用delete释放。  

2020-07-28
29 0

C++11:std::move和std::forward

std::move强制转化为右值  既然编译器只对右值引用才能调用转移构造函数和转移赋值函数,而所有命名对象都只能是左值引用,如果已知一个命名对象不再被使用而想对它调用转移构造函数和转移赋值函数,也就是把一个左值引用当做右值引用来使用,怎么做呢?标准库提供了函数std::move,这个函数以非常简单

2020-07-28
27 0

C++11:移动语义

为什么需要移动语义指针成员和拷贝构造  当一个类中含有指针成员时,由于默认的拷贝构造函数只会进行浅拷贝,所以当我们写出一下代码时:

2020-07-27
28 0

C++11:右值引用

左值、右值  在C语言中,我们常常会提起左值lvalue、右值rvalue这样的称呼。一个最为典型的判别方法就是,在赋值表达式中,出现在等号左边的就是左值,而在等号右边的,则称为右值。如:inta=1;intb=2;intc=a+b;  在这个赋值表达式中,c就是一个左值,而a+b则是一个右值。  

2020-07-27
33 0

C++11:模板的改进

右尖括号>改进  在C++98/03的泛型编程中,模板实例化有一个很繁琐的地方,就是连续两个右尖括号>>会被编译解释成右移操作符,而不是模板参数表的形式,需要一个空格进行分割,以避免发生编译时的错误。vector<vector<int>>a;//err,编译

2020-07-26
25 0

C++11:defaulted 和 deleted 函数

defaulted背景问题  C++的类有四类特殊成员函数,它们分别是:默认构造函数、析构函数、拷贝构造函数以及拷贝赋值运算符。这些类的特殊成员函数负责创建、初始化、销毁,或者拷贝类的对象。如果程序员没有显式地为一个类定义某个特殊成员函数,而又需要用到该特殊成员函数时,则编译器会隐式的为这个类生成一

2020-07-26
23 0