C++新特性相关
文章平均质量分 73
Mango酱
这个作者很懒,什么都没留下…
展开
-
04-----C++11可变模版参数的妙用--泛化之美
1 概述C++11的新特性–可变模版参数(variadic templates)是C++11新增的最强大的特性之一,它对参数进行了高度泛化,它能表示0到任意个数、任意类型的参数。相比C++98/03,类模版和函数模版中只能含固定数量的模版参数,可变模版参数无疑是一个巨大的改进。然而由于可变模版参数比较抽象,使用起来需要一定的技巧,所以它也是C++11中最难理解和掌握的特性之一。虽然掌握可变模版参数有一定难度,但是它却是C++11中最有意思的一个特性,本文希望带领读者由浅入深的认识和掌握这一特性,同时也会通原创 2021-08-13 18:58:21 · 252 阅读 · 0 评论 -
03-----C/C++ 实现可变参数的函数
头文件:C: #include <stdarg.h>C++: #include <cstdarg>C函数要在程序中用到以下这些宏:void va_start( va_list arg_ptr, prev_param ); type va_arg( va_list arg_ptr, type ); void va_end( va_list arg_ptr );对实现可变参数的相关函数和变量进行解释:1)va_list: 变长参数列表的一个对象 定义: typ原创 2021-07-20 11:41:48 · 171 阅读 · 0 评论 -
02-----C++11的decltype
先参考以下文章,后续有时间再自己测试一下。参考文章:【C++深陷】之“decltype”。注:decltype传函数名是获取函数的类型,而传函数及其参数代表获取函数返回值类型。例如:int add(int &a, bool b);decltype(add) *x; // 传函数名,x代表是int (int &a, bool b)类型的函数指针。decltype(add(int &a, bool b)) x; // 传函数及其参数,x代表的是int返回值的类型。原创 2021-07-20 11:13:51 · 140 阅读 · 0 评论 -
01-----C++11的std::move和std::forward完美转发
一 std::move1. std::move的功能和优点功能:返回传入参数的右值引用。右值引用的概念是在C++11才提出来的。在此之前只有一种引用。说白点,就是将所有权进行转移,若转移成功后,所有权到达新的对象,原对象不再拥有所有权,再次访问会发生未知错误,例如段错误,未知值等等。或者说,move 只是纯粹的将一个左值转化为了一个右值。优点:调用此函数不会引起任何数据争用。(Calling this function introduces no data races.)需要注意的重点是:1)如原创 2021-07-19 19:00:28 · 517 阅读 · 4 评论 -
智能指针之unique_ptr(删除器、尺寸)08
一 unique_ptr1 unique_ptr删除器unique_ptr和shared_ptr一样,默认删除器都是使用delete,所以当我们创建的是一个数组或者文件这些时,显然delete是无法有效回收的。删除器是一个可调用对象,其中可调用对象可以是普通函数,或者重载了()括号的类,或者lambda表达式等等。unique_ptr删除器比shared_ptr多了一步,先要在类型模板参数中传递进去类型名,然后在参数中再给具体的其函数名。void mydeleter(string *pdel){原创 2021-02-28 17:03:42 · 1327 阅读 · 0 评论 -
智能指针之unique_ptr(概述,初始化,成员函数用法,以及转化成shared_ptr)07
一 unique_ptr1 unique_ptr概述独占式的概念(所有权);同一时刻只能有一个unique_ptr指向这个对象(这块内存),当这个unique_ptr被销毁时,它所指向的对象也被销毁。2 unique_ptr的初始化2.1 正常初始化unique_ptr<string> p1(new string("Hello World"));2.2 C++14新特性make_unique函数初始化C++11中没有,C++14中才有make_unique,它不支持指定删除器的语原创 2021-02-28 13:56:42 · 15787 阅读 · 0 评论 -
智能指针之weak_ptr06
一 weak_ptr看名字就知道,他是一个弱引用,他的存在是为了辅助shared_ptr的循环引用问题,它不占用引用数。只能通过shared_ptr或者weak_ptr构造赋值。它没有重载 * 和 -> 运算符,因此不可以直接通过 weak_ptr 访问对象,典型的用法是通过 lock() 成员函数来获得 shared_ptr,进而使用对象。大家理解时,将weak_ptr看成用来监视shared_ptr(强引用)的生命周期用。是一种对shared_ptr的扩充。1 weak_ptr初始化赋值原创 2021-02-28 11:06:30 · 724 阅读 · 0 评论 -
智能指针之shared_ptr易错点05
一 shared_ptr易错点1 慎用裸指针给shared_ptr赋值例1class A {public: A() {}; A(int i) { m_i=i; cout<<"A"<<endl; }; void SetI(int i) {m_i=i;}; int GetI(){return m_i;} ~A() { cout<<"~A"<<endl;原创 2021-02-28 10:16:18 · 1035 阅读 · 0 评论 -
智能指针之与shared_ptr有关的enable_shared_from_this类模板04
一 enable_shared_from_this模板类详解什么时候该使用enable_shared_from_this模板类?当我们需要一个类对象返回本身并且该类使用了shared_ptr智能指针时,就需要使用enable_shared_from_this。并且需要注意,当我们使用智能指针管理资源时,必须统一使用智能指针,而不能再某些地方使用智能指针,某些地方使用原始指针,否则不能保持智能指针的语义,从而产生各种错误。1 错误使用this返回对象本身错误代码如下:class Test{publ原创 2021-02-27 23:51:38 · 425 阅读 · 0 评论 -
智能指针之shared_ptr初始化,引用计数,常用操作和自定义删除器等等03
一 share_ptr1 share_ptr基础1)共享所有权,不是被一个shared_ptr拥有,而是被多个shared_ptr之间相互协作。shared有额外开销。2)工作原理:利用引用计数的方法管理一片内存,每增加一个shared_ptr,count数加1,同理,每减少一个shared_ptr,count减1;这种引用也称为强引用。3)最后一个指向该内存对象的shared_ptr在什么情况下,会释放该对象呢?这个shared_ptr被析构的时候。这个shared_ptr指向其他对象时。原创 2021-02-27 20:21:19 · 7444 阅读 · 1 评论 -
智能指针之auto_ptr02
1 auto_ptr该智能指针已经被弃用,下面只是演示它所有权改变后不报错误的代码,实际上你编译的时候它也会提示你auto已经被弃用,但还能运行。#include <iostream>#include <string>#include <memory>using namespace std;/* auto_ptr<>的使用 已经被C++11抛弃 1 采用所有权模式 存在潜在的内存问题 任何情况别用 这里只是原创 2021-02-27 13:13:45 · 94 阅读 · 0 评论 -
智能指针之概述01
一 智能指针概述1 为何使用智能指针首先我们先谈为何需要智能指针,C++11之前操作堆内存空间都是使用new,delete来维护,但是很容易造成new出来的内存忘记delete,开发人员需要大量时间维护修复。而new出来返回的指针也叫裸指针。1)裸指针:直接用new返回的指针。这种指针强大,灵活,但是开发者需要全程负责维护,一不小心就容易出错,一旦用错将造成重大问题。2)智能指针:解决裸指针可能代码的各种问题。智能指针就理解成“裸指针”进行包装,给裸指针外边包了一层。它使用RALL技术,能自动根据原创 2021-02-27 11:58:06 · 141 阅读 · 0 评论