Здравствуйте, fGordon, Вы писали:
G>>> просто вот както в жизни <привык не доверять таким вот "по умолчанию" методам>. <привык описывать, если они нужны, "ручками">. КД>>Что-то я не понял зависимости между первым и вторым G>Что не понятного? Я опишу конструктор копии руками. Я не буду использовать конструктор копии "дефолтовый". G>Как еще объяснить, я не знаю...
А зачем?
class A
{
private:
int delta_;
int beta_;
std::string gamma_;
};
Пусть компьютер для него рисует оператор копирования и copy ctor, он железный, а мне за строчки не платят
Здравствуйте, Hottabych1, Вы писали:
H>Вообще, судя по количеству ответов тема довольна животрепещущая...
Неа, просто флейм и оффтоп поднялся. Одни copy ctor и operator= сколько постов собрали
Здравствуйте, Kubyshev Andrey, Вы писали:
H>>Конечно же, виноват и все такое. Но разве так уж важно, что я не могу с ходу написать конструктор копирования? Ведь достаточно потратить 30 сек времени, чтобы узнать, как это записывается. Ведь умение-неумение записать ту или иную конструкцию на языке программирования еще не говорит о том, что я не умею программировать, не умею решать задачи. Потому что синтаксические правила языка узнаются за ничтожное время и, на мой взгляд, гораздо важнее посмотреть, как соискатель будет вести себя при решении каких-либо необычных задач, как у него работает именно мозг, а не память. Каково ваше мнение?
KA>Такие люди как ты называются "велосипедисты". Почти везде у них необычные и нестандартдные решения стандартных задач. Лично я с такими не люблю работать. Если ты только окончил универ, то еще все впереди, а если ближе к 30, то ядреный велосипедист.
Я на 6м курсе, в июне заканчиваю.
Здравствуйте, Kubyshev Andrey, Вы писали:
H>>Конечно же, виноват и все такое. Но разве так уж важно, что я не могу с ходу написать конструктор копирования? Ведь достаточно потратить 30 сек времени, чтобы узнать, как это записывается. Ведь умение-неумение записать ту или иную конструкцию на языке программирования еще не говорит о том, что я не умею программировать, не умею решать задачи. Потому что синтаксические правила языка узнаются за ничтожное время и, на мой взгляд, гораздо важнее посмотреть, как соискатель будет вести себя при решении каких-либо необычных задач, как у него работает именно мозг, а не память. Каково ваше мнение?
KA>Такие люди как ты называются "велосипедисты". Почти везде у них необычные и нестандартдные решения стандартных задач. Лично я с такими не люблю работать. Если ты только окончил универ, то еще все впереди, а если ближе к 30, то ядреный велосипедист.
А такие люди как ты называются "ходячие микросхемы". Стандартный набор состояний на входах — стандартный набор состояний на выходах.
Здравствуйте, LuciferMoscow, Вы писали:
S>>> надо ещё сделать проверку на присваивание самому себе: E>>Во-первых, эту проверку следует делать всегда, независимо от типа возвращаемого значения. LM>Тут уже показывали фокус со swap. И никаких проверок не нужно
Согласен, проверка в этом случае необязательна. Однако вреда от нее немного, а эффективность в некоторых (пускай и довольно редких) случаях может возрасти.
У того же Саттера:
Note that copy assignment operators may well elect to check for self-assignment even if they don't have to—for example, they might do so for efficiency.
Здравствуйте, enzo, Вы писали:
S>>>> надо ещё сделать проверку на присваивание самому себе: E>>>Во-первых, эту проверку следует делать всегда, независимо от типа возвращаемого значения. LM>>Тут уже показывали фокус со swap. И никаких проверок не нужно E>Согласен, проверка в этом случае необязательна. Однако вреда от нее немного, а эффективность в некоторых (пускай и довольно редких) случаях может возрасти.
ИМХО экономия на спичках.
Здравствуйте, branco, Вы писали:
KA>>Такие люди как ты называются "велосипедисты". Почти везде у них необычные и нестандартдные решения стандартных задач. Лично я с такими не люблю работать. Если ты только окончил универ, то еще все впереди, а если ближе к 30, то ядреный велосипедист. B>А такие люди как ты называются "ходячие микросхемы". Стандартный набор состояний на входах — стандартный набор состояний на выходах.
Хоть горшком назови, но если я приходу в фирму и мне говорят "мы используем буст", то это одно. А если я через пару месяцев нахожу в библиотеке класс Antocopyable, то это другое
Здравствуйте, LuciferMoscow, Вы писали:
LM>Извините, но "фокус со swap" позволят избежать дублирования кода(в copy ctor & operator=). Но не в Вашем случае
Фокус со swap позволяет не схватить исключение на полусозданном объекте и не потерять в памяти его члены.
Здравствуйте, Hottabych1, Вы писали:
H>Господа из Яндекса! H>Если вы это читаете, то дайте мне еще один шанс. Обещаю, возьмете к себе — не пожалеете!
Ты думаешь, если ты не помнишь семантику конструктора копирования и в корне не представляешь, что такое std::map, то ты будешь иметь какой-то успех в яндексе?
Здравствуйте, i-maverick, Вы писали:
LM>>Извините, но "фокус со swap" позволят избежать дублирования кода(в copy ctor & operator=). Но не в Вашем случае IM>Фокус со swap позволяет не схватить исключение на полусозданном объекте и не потерять в памяти его члены.
На полускопированном, если быть точным. Но в целом согласен.
АК>Вероятно, они имели в виду, что применение const — это признак хорошего качественного кода, в который изначально заложен дополнительный контроль и предотвращение возможных багов. Потому что const, по большому счету, в принципе необязателен... но зачем-то его придумали
А придумали const в операторе= и конструкторе копирования чтобы можно было копировать константные объекты.
Здравствуйте, AntZ, Вы писали:
AZ>Согласен, спрашивают коварные вопросы. Любого, даже очень опытного программера можно "подловить". я вот например очень удивился, когда 2-3 в резуьтате дало 4 миллиарда с копейками (один операнд был signed, другой unsigned)
33-битовый процессор? Тоже такой хочу!
Здравствуйте, fGordon, Вы писали:
G>ЗЫ: конечно, порой выводит из себя, что собеседуют по таким вещам, которые применяешь, но теорию по ним рассказать толком не можешь только на пальцах.. но сие похоже только моя проблема.
Кто ясно мыслит, тот ясно излагает! (копирайт не знаю чей )
Здравствуйте, sraider, Вы писали:
АК>>Вероятно, они имели в виду, что применение const — это признак хорошего качественного кода, в который изначально заложен дополнительный контроль и предотвращение возможных багов. Потому что const, по большому счету, в принципе необязателен... но зачем-то его придумали
S>А придумали const в операторе= и конструкторе копирования чтобы можно было копировать константные объекты.
S>
S>A a;
S>const A b;
S>// вот для этого:
S>a = b;
S>A c(b);
S>
Хм... а разве неконстантный объект к константному не приводится автоматом при передаче в качестве параметра?
Здравствуйте, LuciferMoscow, Вы писали:
LM>Здравствуйте, fGordon, Вы писали:
G>>>> просто вот както в жизни <привык не доверять таким вот "по умолчанию" методам>. <привык описывать, если они нужны, "ручками">. КД>>>Что-то я не понял зависимости между первым и вторым G>>Что не понятного? Я опишу конструктор копии руками. Я не буду использовать конструктор копии "дефолтовый". G>>Как еще объяснить, я не знаю... LM>А зачем? LM>
LM>class A
LM>{
LM>private:
LM> int delta_;
LM> int beta_;
LM> std::string gamma_;
LM>};
LM>
LM>Пусть компьютер для него рисует оператор копирования и copy ctor, он железный, а мне за строчки не платят
Не понял... это шутка такая? Или серьезно? Если серьезно, то как по дефолту будет создана копия мембера gamma_, и как это отразится на надежности кода?
Здравствуйте, branco, Вы писали:
B>Здравствуйте, Hottabych1, Вы писали:
H>>Господа из Яндекса! H>>Если вы это читаете, то дайте мне еще один шанс. Обещаю, возьмете к себе — не пожалеете!
B>Можешь вот здесь http://www.isd.dp.ua/test.html.ru ещё потренироваться.
Интересно, у кого какие результаты Меня поблагодарили за участие
Здравствуйте, McSeem2, Вы писали:
MS>Здравствуйте, jazzer, Вы писали:
J>>Конструктор копирования — это конструктор с одним параметром-ссылкой на тот же самый класс. J>>Константная это ссылка или нет — не важно.
MS>Более того, передача по значению в конструкторе — это по сингнатуре тоже конструктор копирования! Просто так уж получилось в результате всех этих извилистых путей дизайна языка, что он приводит к бесконечной рекурсии. Типичный случай наступания себе на хвост.
Здравствуйте, dr.Chaos, Вы писали:
DC>То что этот конструктор может быть вызывается неявно в некоторых случаях и если объект содержит указатель, то при удалении копии нас ждет сюрприз. Мало того, если я пользуюсь чужим кодом, то я предполагаю не нарвусь на растяжку.
так. снова в меня летят непонятные камни
в итоге, в коде может быть:
а) КК дефолтовый, в создании которого я не принимал участия
б) КК "рукописный", делающий помимо основной работы еще какую то (какие нибудь индексы проапдейтил или еще что).
в) КК дефолтовый и КК "рукописный".
так вот, что может ввести вас в ступор при любом из этих исходов?
DC>Т.е. либо есть возможность копировать и она работает, либо копировать нельзя. Промежуточные состояния приводят к трате чужих нервов(своих?), особенно если глюк не проявился в отладке, но релиз убил.
Здравствуйте, LuciferMoscow, Вы писали:
LM>А зачем? LM>
LM>class A
LM>{
LM>private:
LM> int delta_;
LM> int beta_;
LM> std::string gamma_;
LM>};
LM>
LM>Пусть компьютер для него рисует оператор копирования и copy ctor, он железный, а мне за строчки не платят
бесспорно. но просто случаются такие моменты, когда нужен КК. и именно в такие моменты я описываю свой КК, а не надеюсь на работу дефолтового КК. и про такие моменты я и говорю.