类的新功能与STL容器变化
415 字
2 分钟
类的新功能与STL容器变化
1. 类的新功能
1.1 默认移动构造与移动赋值
C++11 在原有的 6 个默认成员函数基础上,新增了移动构造和移动赋值。
-
自动生成条件(触发规则):
- 如果你没有实现析构函数、拷贝构造、拷贝赋值中的任何一个,编译器才会生成默认的移动构造/赋值。
-
行为:
-
内置类型:逐字节拷贝。
-
自定义类型:若该成员实现了移动语义则调用移动,否则调用其拷贝构造。
-
-
注意: 如果提供了移动构造/赋值,编译器将不再自动提供拷贝构造/赋值。
1.2 default 与 delete
-
default(显式缺省): 强制编译器生成默认版本(例如你写了拷贝构造导致移动构造不生成,可用它找回)。 -
delete(删除函数): 明确禁止生成该函数。在 C++98 中需要设为private且不实现,C++11 只需加= delete。
用法模板:
class MyClass {public:MyClass() = default; // 强制默认构造MyClass(const MyClass&) = delete; // 禁止拷贝};
1.3 其他增强
-
成员缺省值: 允许在声明变量时给初值,本质是给初始化列表使用的。
-
final与override:final限制类不可继承或虚函数不可重写;override强制检查虚函数是否成功重写。
2. STL 容器的变化
-
新容器:
unordered_map/unordered_set(哈希实现,性能优于map)、array(静态数组)、forward_list。 -
新接口: *
emplace系列:直接在容器内部构造对象,减少拷贝。-
右值引用版本:所有容器的
push/insert均支持移动语义。 -
范围
for循环:直接遍历容器元素。
-
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章智能推荐
1
C++11 并发编程
C++11先看问题:std::thread 传回结果有多麻烦 std::future:一个"承诺未来会有结果"的盒子 std::async 与 std::launch:一键开启异步计算 std::promise:手动"兑现承诺" std::pack…
2
Lambda表达式,function与bind包装器
C++11Lambda 表达式:C++11 引入的一种匿名函数定义方式,允许在调用的地方内联定义函数逻辑,极大提升了代码的紧凑性和可读性。其底层本质是编译器自动生成的匿名仿函数(Functor)类对象。
3
可变参数模板与emplace系列
C++11在 C++11 之前,模板的参数个数是固定的。C++11 引入了可变参数模板,允许函数或类接受任意数量、任意类型的参数。
4
右值引用与移动语义
C++11传统C++98中只有引用的概念(即现在的左值引用),C++11 新增了右值引用,两者都是给对象取别名。
5
智能指针
C++11内存泄漏 (Memory Leak):动态分配的堆内存由于程序设计错误未被释放,导致系统内存持续消耗。
随机文章随机推荐

