fre*_*low 35 c++ templates swap move-semantics c++11
可能重复:
移动语义==自定义交换功能已过时?
这就是std::swapC++ 11中的样子:
template<typename T>
void swap(T& x, T& y)
{
T z = std::move(x);
x = std::move(y);
y = std::move(z);
}
Run Code Online (Sandbox Code Playgroud)
如果我的类定义了移动构造函数和移动赋值运算符,我还是必须专注std::swap于我自己的类型,或者它会std::swap尽可能高效吗?
How*_*ant 31
专业化std::swap现在是可选的,但不是已弃用.理由是表现.
对于原型设计代码,甚至可能是大量的运输代码,std::swap都会很快.但是,如果您需要从代码中获取每一点内容,那么编写自定义交换仍然是一个重要的性能优势.
考虑一下你的类基本上有一个拥有指针的情况,你的移动构造函数和移动赋值只需要处理那个指针.计算每个成员的机器负载和存储:
移动构造函数:1个加载和2个存储.
移动分配:2个装载和2个存储.
自定义交换:2个加载和2个商店.
std::swap 是1个移动施工和2个移动任务,或:5个负载和6个商店.
自定义交换可能仍然比两倍或三倍快std::swap.虽然任何时候你都试图通过计算负荷和商店来计算某些东西的速度,但两者都会很快变得邪恶.
注意:在计算移动分配的成本时,请确保并考虑到您将进入移动值(在std::swap算法中).这通常会导致解除分配的成本,但是以分支为代价.
| 归档时间: |
|
| 查看次数: |
15003 次 |
| 最近记录: |