C++编程题之新特性

1. 语言可用性的强化

1)nullptr:本质还是0,但相对于NULL提供了类型;
2)范围for;
3)auto自动推导类型
4)迭代器遍历
5)继承构造与委托构造
6)override:修饰虚函数,编译器将检查基类的函数是否存在这样的虚函数;
7)final:修饰类,表示该类不可继承;修饰虚函数,表示该函数不能被重载;
8)四种类型转化
static_cast:
1)用于基础类型之间的转换,与C语言强制类型转换一样,没有安全类型检查;
2)用于上行转换(子类转父类);
const_cast:
用于const类型之间的转化;
dynamic_cast
有条件转换,运行时进行类型安全检查。若下行检查失败,返回值为nullptr
reinterpret_cast:指针与其他类型之间的转换

2. 语言运行时的强化

1)lambda表达式与匿名函数
在这里插入图片描述
在这里插入图片描述
2)右值引用
3)函数对象包含器和Bind机制
目的是为函数提供一个容器。
lambda函数本质是函数对象,当lambda表达式的捕获列表为空时,lambda表达式还能作为一个函数指针进行传递。在C++11中,能够被调用的对象类型称之为可调用类型。该类型***通过std::function引入***,支持以下四种类型。
a)普通函数
int fun(int b){ return b; }
std::function<int (int)> func = fun; // 包装了一个返回值为int,参数为int的函数。
b)匿名函数
c)类的成员函数
d)仿函数
4)智能指针与内存管理

为什么要使用智能指针?
智能指针的作用是管理一个指针,是因为存在以下几种情况:申请内存空间在函数结束后忘记释放,造成内存泄露。使用智能指针在很大程度上避免了这些问题,因为智能指针是一个类,当超出了类的作用域时,类会自动调用析构函数,析构函数会自动释放资源。所以智能指针的作用原理就是利用了函数结束时自动释放内存空间,不用手动释放。
auto_ptr:
auto_ptr特征:
a)两个auto_ptr对象拥有同一块内存指针所有权时,某一时刻发生析构时,该内存释放了多次,造成内存泄露;
b)两个auto_ptr对象之间赋值时,内部指针被拥有的所有权发生转移;
auto_ptr存在的问题:
a)作为函数参数传递,值传递调用拷贝构造函数,将原指针所有权转移(原指针被清空);
b)不能使用vector,容易产生不可避免的错误;
auto_ptr提供的函数:get(); release(); reset();

unique_ptr:
相对于auto_ptr提升了安全性(没有了浅拷贝),增加了(delete析构)和对数组的支持,禁止普通指针的赋值和拷贝。保证同一时间只有一个智能指针可以指向该对象,避免资源泄露。
在auto_ptr的基础上新增了move函数,该函数的使用,使unique_ptr交出内部指针的所有权,而自身置空,内部指针不会释放。
例如:
int *p = new int(9);
unique_ptr uptrl§;
unique_ptr uptrl2 = move(uptrl);
uptrl;// uptrl被置空不能再使用 否则报错
share_ptr:
多个智能指针可以指向相同对象,该对象和其相关资源会在“最后一个引用被销毁”的时候销毁。内部使用计数机制表明资源被几个指针共享。不仅可以通过new构造,还可以通过其它三个智能指针来构造。当调用release函数时,当前指针会释放资源所有权,计数器减1,直到计数器为0,资源才会被彻底释放。

为什么share_ptr这么好用还要提出weak_ptr?
share_ptr智能指针还会存在内存泄漏,当两个对象相互使用一个share_ptr成员变量指向对方,会造成循环引用,使引用计数失效,从而导致内存泄漏。
weak_ptr:
目的是配合share_ptr而引入一种智能指针来协助一个share_ptr工作,它的构造和析构不会引起引用计数增加或者减少,weak_ptr是解决share_ptr相互引用时的死锁问题,只是来打破一种平衡。
5)并行与并发
6)提升C++的vector性能有哪些?
a. 提前分配足够的内存空间避免不必要的重新分配;
b. 使用shrink_fit(可用swap)函数来释放vector占用的空间而不是通过clear或者erase函数;
c. 在填充或者拷贝vector时,应该使用赋值而不是insert或者push_back;
d. 遍历vector中元素时,尽量适用下标或者迭代器;
e. 向vector中插入元素时尽量使用emplace_back而不是push_back.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kevin_org

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值