what does `using std::swap` inside the body of a class method implementation mean?

前端 未结 2 1013
清酒与你
清酒与你 2020-12-09 15:30

I was trying to learn and adopt the copy-swap idiom following this thorough explanation on this question: the Copy-Swap Idiom.

But I found some code I had never seen

2条回答
  •  [愿得一人]
    2020-12-09 15:48

    This mechanism is normally used in templated code, i.e. template class Foo.

    Now the question is which swap to use. std::swap 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 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.

提交回复
热议问题