学一学CMU的15445
Projects #0 - C++ Primer
C++ Bootcamp
主要针对C++11特性,共
references.cpp
有关引用(别名),函数传引用
move_semantics.cpp
有关移动语义和右值引用
lvalue(左值):refer to 内存中某个有权限访问的区域的对象
rvalue(右值):非左值的值,数据位于的区域没有权限访问(字面常量)或者没有必要访问(匿名对象),包括将亡值和纯右值
赋值语句中等号左边的必须是左值,右边的随便
左值引用(&)和右值引用(&&)都必须立即初始化,右值引用可以通过移动的方式在浅拷贝的情况下保证拷贝的安全性,在设计和实现类时,对于需要动态申请大量资源的类,应该设计右值引用的拷贝构造函数和赋值函数,以提高应用程序的效率,具体 3. 中有讲
std::move() 方法可以将左值转换为右值,即将亡值,方便使用移动语义,需要
<utility>
头文件
move_constructors.cpp
有关应用移动语义的拷贝构造函数和赋值重载函数
在类定义中删除左值引用的拷贝构造函数和赋值重载函数,意味着实例化后就不再允许被复制,防止双重删除或者内存泄露
References:
templated_functions.cpp
有关模板函数
注意模板参数不一定要是
class
或者typename
,也可以是别的,但没必要templated_classes.cpp
有关模板类
wrapper_class.cpp
有关包装类
- RAII(Resource Acquisition is Initialization):一个实例化管理一个资源,防止双重删除或内存泄露
- 使用移动语义
iterator.cpp
有关迭代器,实现了一个双向链表(DLL)及其迭代器
namespaces.cpp
有关命名空间
vectors.cpp
有关动态数组
std::remove_if()
不能删除元素,只能将元素移到末尾,配合erase()
函数才能删掉emplace_back()
比push_back()
稍快sets.cpp
作者: wsy_jim