在构造函数中申请资源,在析构中释放。对于多线程中锁的获取与释放,可充分利用器特性,避免每次返回都需要释放锁,避免冗余代码。c 11中可用std::lock_guard。
PointtoImplementation,保持对外接口不变,又不暴露成员变量和私有函数。
c 11引入了智能指针对象,可以使用std::unique_ptr对象来管理上述用于隐藏具体实现的指针。
c 11是c 发展史上的重大更新,改进了c 98/03的众多问题并引入了很多新的语言特性。
假设类A有一个类型为int数组的成员变量,在c 98/03中在构造函数初始化中我们要这样写。对于字符数组可能就要使用strcpy或者memcpy了。
c 11新引入了对象std::initialize_list,用来实现可接受多个自定义类型的{}语法,接受自定义类型
T,使用需要包含头文件#include
c 98/03中,不同编译器使用不同的注解为代码添加额外的说明。c 11起同意制定了常用注解标签。
override:父类加了virtual的方法能被子类重写,子类加不加virtual关键字都行。这会带来两个弊端
加了override关键字编译器会检查改方法是重写的父类的方法,如果函数签名错误在编译期间会给出相应的错误。
=default:如果没有显示的给出构造函数、析构函数、拷贝构造和操作符重载=,在使用时编译器会自动生成默认的无参函数或者在链接时报错,用=default标记的函数编译器会给出默认实现。通常用来简化构造函数中没有实际初始化代码的写法------特别是在.h和.cpp文件分离时。
=delete:禁止编译器自动生成构造函数、析构函数、拷贝构造函数和操作符重载函数。实际工程中如果明确不需要这4个函数,为了防止编译器自动生成,直接用=delete禁止即可,还能减小可执行文件的体积。
std::pair一般只能表示两个元素,std::tuple可以放任意数量的元素,不需要一个被定义成结构体的POD。