在copy-and-swap-idiom的漂亮答案中,有一段代码我需要一些帮助:
class dumb_array
{
public:
// ...
friend void swap(dumb_array& first, dumb_array& second) // nothrow
{
using std::swap;
swap(first.mSize, second.mSize);
swap(first.mArray, second.mArray);
}
// ...
};
他又加了一句
还有其他主张,我们应该专门为我们的类型std::swap,提供类内交换以及自由函数交换等等。但这都是不必要的:任何正确的swap使用都将通过一个不合格的调用,并且我们的函数将通过ADL找到。一个函数就可以了。
我必须承认,对于friend
,我有点“不友好”。所以,我的主要问题是:
swap
不是静态的吗?它显然没有使用任何成员变量。friend
出现的地方?Side-questions:
noexcept
标记我的__abc0吗?friend iter begin()
和friend iter end()
吗?我认为friend
在这里不需要,对吗?