最近在改 XGBoost 的代码。XGBoost 在代码中使用了很多来自 C++11 标准中的特性,让我比较好奇和困惑的,就有其中关于右值引用的部分。涉及到代码里,有比较明显的两类用法:

std::move
1
std::move(foo)
std::unique_ptr
1
std::vector<std::unique_ptr<T>>

前者是使用 std::move 返回 foo 的右值引用;后者则在容器 std::vector 中放入了不可复制只能移动的类的对象(智能指针 std::unique_ptr),当你尝试用常规方法将整个 std::vector 中的元素依次加入另一个 std::vector 的时候,编译器就会报错,提示 std::unique_ptr 的拷贝构造函数是被删除的。

因为好奇和困惑,所以想要把它们搞清楚,于是有了这篇文章。

阅读全文 »

继续记录一下 Tmux 的技巧。

实际使用中,我会在同一个宿主机上开多个 Tmux session。通常来说,每个 Session 内的不同 Windows 共同完成一件事情。这就意味着,同一个 Session 可能用 SSH 连着不同的机器。

某时刻,在 Session 1 中的 Window 1 已经完成任务;恰好,它连着机器 A,而 Session 2 正需要一个连着机器 A 的终端。此时就会考虑把 A 的终端从 Session 1 中移到 Session 2。

这可以用 Tmux 命令 move-window 来实现。

阅读全文 »