Код: Выделить всё
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 для нашего типа, обеспечить внутриклассовую подкачку наряду со свободной подкачкой и т. д. Но во всем этом нет необходимости: любое правильное использование подкачки будет осуществляться посредством неквалифицированного вызова, а наша функция будет найдена через ADL. Одной функции хватит.
С другом Должен признаться, я немного в «недружелюбных» отношениях. Итак, мои основные вопросы:
- выглядит как бесплатная функция, но она находится внутри тела класса?
- почему этот обмен не статический? Очевидно, он не использует никаких переменных-членов.
- "При правильном использовании swap можно обнаружить обмен через ADL"? ADL будет искать пространства имен, верно? Но заглядывает ли он и внутрь классов? Или здесь пригодится друг?
- При использовании C++11 следует ли мне помечать свои обмены тегом [/b]?
Код: Выделить всё
noexcept - С C++11 и его range-for, следует ли мне размещать Friend Iter Begin() и Friend Iter End() одинаково внутри класса? Думаю, друг здесь не нужен, да?
Подробнее здесь: https://stackoverflow.com/questions/569 ... r-function
Мобильная версия