Начало положено: первые три подписчика есть! Это может показаться смешным, но все большое начинается с малого. Пока прошел всего лишь один день (на момент подготовки этого выпуска). Если копнуть историю прошлой рассылки, то там такая вот впечатляющая тенденция: http://subscribe.ru/stat/comp.soft.prog.compu/?2002
Пока работаем на собой: собираем статьи, придумываем темы, отрабатываем процесс подготовки и публикации.
В настоящий момент выпуском рассылки занимаются:
RXL - редактура, форматирование, новости, выпуск.
Sel - грамматика, стилистика и подталкивание (за все это ей большое спасибо).
Выпускать рассылку каждый день, как это было когда-то, мы пока не можем. Для начала - раз в неделю. Возможно, в промежутке мы будем выпускать чисто информационные выпуски. Главное - колесо снова завертелось. Надолго ли - покажет время. Многое зависит от вас, читатели: пишите свои отзывы - авторы это любят. ;) В большинстве случаев писать лично не стоит - лучше пишите им на форуме в подходящий под тематику раздел.
В этом выпуске предлогаем Вашему вниманию отрывок очередной статьи Михалыча из серии статей о копировании и присваивании в C++. Начало серии вы можете прочесть на нашем сайте. Всего сейчас у нас 198 статей наших авторов. И будет больше! Автором может стать любой желающий!
Классы: копирование и присваивание. Часть 3.
Продолжим начатое в статьях "Классы: копирование и присваивание. Часть 1 и Часть 2" подробное рассмотрение проблемы копирования и присваивания в классах.
В этой части мы рассмотрим разницу между копированием и присваиванием, посмотрим, когда выполняется копирование, и обсудим положение конструктора копий и операции присваивания в классах.
Когда выполняется копирование?
Издержки при копировании сложных объектов могут быть очень высокими, о чем несложно догадаться, если представить себе, насколько сложны классы, работающие с графическими объектами, управляющие развитыми структурами данных или входящие во множественные иерархии. Поэтому небесполезно будет выяснить, в каких же ситуациях вызываются и выполняются конструктор копий и операция присваивания. Поскольку по характеру своей деятельности они очень похожи, мы не станем рассматривать их по отдельности, а поговорим о копировании
вообще.
Копирование происходит при передаче объекта по значению, т. е. когда в описании соответствующего аргумента функции не используются операция получения адреса (&) или разыменования (*). При возврате объекта по значению также имеет место копирование. Вот примеры обоих случаев:
void Pixel(POINT arg); //передача объекта по значению
POINT Draw(void); //возврат объекта по значению
POINT - в данном случае тот самый класс, определяющий точку на плоскости из первой части этих статей.
Когда объект передается по значению, все производимые над ним манипуляции в действительности касаются только его копии. Если объект создается внутри функции, крайне желательно возвращать его по значению, а не по ссылке. Почему?