This mechanism is normally used in templated code, i.e. template <typename Value> class Foo
.
Now the question is which swap to use. std::swap<Value>
will work, but it might not be ideal. There's a good chance that there's a better overload of swap
for type Value
, but in which namespace would that be? It's almost certainly not in std::
(since that's illegal), but quite likely in the namespace of Value
. Likely, but far from certain.
In that case, swap(myValue, anotherValue)
will get you the "best" swap possible. Argument Dependent Lookup will find any swap in the namespace where Value
came from. Otherwise the using
directive kicks in, and std::swap<Value>
will be instantiated and used.
In your code, mSize
is likely an integral type, and mArray
a pointer. Neither has an associated namespace, and std::swap
is with 99.9% certainty optimal for them anyway. Therefore, the using std::swap;
declaration seems useless here.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…