170 похожих чатов

Встретил в одной книге вот такое class OakTree { public: auto&

operator=(const OakTree& other) {
// First create local copies without modifying the OakTree objects.
// Copying may throw, but this OakTree will still be in a valid state
auto leafs = other.leafs_;
auto branches = other.branches_;
// No exceptions thrown, we can now safely modify
// the state of this object by non-throwing swap
std::swap(leads_, leafs);
std::swap(branches_, branches);
return *this;
}
std::vector<Leaf> leafs_;
std::vector<Branch> branches_;
} 1) Разве тут нужен вообще operator= ? Ведь по идее тут работает правило нуля. 2) разве тут не должен быть не std::swap , а friend swap, вызываемый посредством ADL или как его там правильно назвать

6 ответов

5 просмотров

1) Тут же указана причина. Если выбросится исключение, состояние должно остаться неизменным.

2) std::swap для std::vector специализирован и позовёт нужный свап сам

Если все доверить компилятору (правило 0), то тупая железяка будет сразу копировать в this->leafs_ = other.leafs_. Не озадачиваясь тем, что leafs и branches логически связаны. И если если leafs скопированы, а при копировании brances срыв - то получится тыква.

The Pressbraker
понял

Вообще, честно говоря, шибко мудреный код. Мне лично ни разу такого писать не приходилось. Все как то по простому - правило_0. НО! Если нужно запустить Луну-25 именно НА Луну, а не В Луну, то писать нужно именно так.

Похожие вопросы

Обсуждают сегодня

у меня такой вопрос про память в x86 возник, может кто пояснить?.. у процессора есть (как минимум) 3 типа адресов (названия "п1", "п2", "п3" --- мои, чтобы проще было дальше)...
Toideng
5
у процессора есть (как минимум) 3 типа адресов (названия "п1", "п2", "п3" --- мои, чтобы проще было дальше): - "п1" --- виртуальный адрес, то есть тот, который ресолвится в "п...
Toideng
3
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Hello, I need a hand, this is my code: body: ExtendedImageGesturePageView.builder( scrollDirection: Axis.vertical, controller: _pageController, itemCou...
𝘞𝘦𝘢𝘳𝘪𝘯𝘨𝘔𝘦𝘥𝘢𝘭 🦋
1
читать файл максимально быстро? странный вопрос))
zamtmn
50
why html and css is not standard? i mean why different browser has their own engine and styles and how them work to show result to end user?
Mr Thieves
11
Господа, как быстро вставлять множество постов через wp_insert_post? использую wp_defer_term_counting wp_defer_comment_counting SET autocommit = 0 pre_wp_unique_post_slug но ...
Александр
4
TCodePointer = record cp: CodePointer; name: string; cnt: Integer; next: TCodePointerArray; // этот тип ещё неизвестен end; TCodePointerArray = array of ...
notme
9
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
Please any new resources to learn flutter?
Gbonafha Ayehnor
8
Карта сайта