学一学CMU的15445

Projects #0 - C++ Primer

C++ Bootcamp

主要针对C++11特性,共 个文件。

  1. references.cpp

    有关引用(别名),函数传引用

  2. move_semantics.cpp

    有关移动语义和右值引用

    • lvalue(左值):refer to 内存中某个有权限访问的区域的对象

      rvalue(右值):非左值的值,数据位于的区域没有权限访问(字面常量)或者没有必要访问(匿名对象),包括将亡值纯右值

      赋值语句中等号左边的必须是左值,右边的随便

    • 左值引用(&)和右值引用(&&)都必须立即初始化,右值引用可以通过移动的方式在浅拷贝的情况下保证拷贝的安全性,在设计和实现类时,对于需要动态申请大量资源的类,应该设计右值引用的拷贝构造函数和赋值函数,以提高应用程序的效率,具体 3. 中有讲

    • std::move() 方法可以将左值转换为右值,即将亡值,方便使用移动语义,需要 <utility> 头文件

  3. move_constructors.cpp

    有关应用移动语义的拷贝构造函数和赋值重载函数

    在类定义中删除左值引用的拷贝构造函数和赋值重载函数,意味着实例化后就不再允许被复制,防止双重删除或者内存泄露

    References:

  4. templated_functions.cpp

    有关模板函数

    注意模板参数不一定要是 class 或者 typename,也可以是别的,但没必要

  5. templated_classes.cpp

    有关模板类

  6. wrapper_class.cpp

    有关包装类

    • RAII(Resource Acquisition is Initialization):一个实例化管理一个资源,防止双重删除或内存泄露
    • 使用移动语义
  7. iterator.cpp

    有关迭代器,实现了一个双向链表(DLL)及其迭代器

  8. namespaces.cpp

    有关命名空间

  9. vectors.cpp

    有关动态数组

    std::remove_if() 不能删除元素,只能将元素移到末尾,配合 erase() 函数才能删掉

    emplace_back()push_back() 稍快

  10. sets.cpp

本文采用CC-BY-SA-3.0协议,转载请注明出处
作者: wsy_jim