跳转至

C++技术术语

1 SFINAE

  • 解释:Substitution Failure Is Not An Error(替换失败不是错误)
  • 使用场景:在模板重载集中,匹配一个失败时会尝试下一个重载,直到所有都匹配失败,这时才是错误
  • 示例
/*
 The compiler will try this overload since it's less generic than the variadic.
 T will be replace by int which gives us void f(const int& t, int::iterator* b = nullptr);
 int doesn't have an iterator sub-type, but the compiler doesn't throw a bunch of errors.
 It simply tries the next overload. 
*/
template <typename T> void f(const T& t, typename T::iterator* it = nullptr) { }

// The sink-hole.
void f(...) { }

f(1); // Calls void f(...) { }

2 RAII

简单的说,RAII机制就是一种对资源申请、释放这种成对操作的封装,通过这种方式实现在局部作用域内申请资源然后自动销毁资源,而不需要手动销毁。

3 什么是 RAII

RAII(Resource Acquisition IInitialization)(资源获得即初始化)是由 c++之父 Bjarne Stroustrup 提出的,他说:使用局部对象来管理资源的技术称为资源获取即初始化;这里的资源主要是指操作系统中有限的东西如内存、网络套接字等等,局部对象是指存储在栈的对象,它的生命周期是由操作系统来管理的,无需人工介入;

4 RAII 原理

  • 资源的使用一般经历三个步骤:
  • 获取资源
  • 使用资源
  • 销毁资源
  • 原理:
  • 利用 C++类构造来获取资源。
  • 利用 C++类析构释放资源。