C++: 右值引用和移动构造

C++ 11 引入了移动语义和右值引用,使得代码的性能得到了大幅提升。其中,移动构造函数是一种特殊的构造函数,它可以接受一个右值引用参数,用来实现将一个对象的资源转移到另一个对象而不需要复制数据的操作。本文将详细介绍移动构造函数和右值引用。

程序员的自我修养: 延迟绑定

调动动态库中的函数时候,涉及到地址重定位,函数地址在链接的时候才能确定下来。链接器会额外生成两张表,一个 PLT(Procedure Link Table) 程序链接表,一个是 GOT(Global Offset Table) 全局偏移表,两张表都在数据段中。

  • 全局偏移表,用来存放 “外部的函数地址”。
  • 程序链接表,用来存放 “获取外部函数地址的代码”。

C++: std::condition_variable

不要无条件的等待。否则可能会错过唤醒,或者唤醒了发现无事可做。

condition_variable.wait() 有两个重载函数

  • void wait (unique_lock& lck)。 无条件的等待
  • void wait (unique_lock& lck, Predicate pred)。 有条件的等待. 大致实现如下
    1
    2
    3
    4
    5
    6
    template<typename _Predicate>
    void wait(unique_lock<mutex>& __lock, _Predicate __p)
    {
    while (!__p())
    wait(__lock);
    }

C++: std::bind

在C++11中,引入了一个新的库 functional ,其中包括了许多有用的函数对象和函数适配器。其中之一是 std::bind。

std::bind 它可以绑定一个函数或成员函数的参数,并返回一个可调用对象。这意味着可以将参数延迟到稍后再使用。

基本用法

下面是一个简单的例子,展示了如何使用 std::bind 实现参数绑定: