- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
Connection::Connection(const Options& opts): impl_(new Impl)
{
impl_->isInitialized = false;
impl_->options = std::move(*opts.impl_);
if (!options().lazyInit)
conn();
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+145
Connection::Connection(const Options& opts): impl_(new Impl)
{
impl_->isInitialized = false;
impl_->options = std::move(*opts.impl_);
if (!options().lazyInit)
conn();
}
Вся соль в строке 4: из объекта opts, переданного по константной ссылке, подло выжимают содержимое. Видимо, никто не пробовал создать два коннекта из одного объекта опций.
там делаются миллионы соединений в секунду, почему кто-то и подумал что std::move() будет хорошей идеей, что бы съэкономить не копировании?
"premature optimization" в ее чистой форме.
Просто не нужно делать этого, нарушая логическую константность.
Правильным подходом было бы передавать входной параметр по значению. Тогда бы ни у кого не возникало иллюзий.