четверг, 22 марта 2012 г.

Неявный вызов конструктора копирования (С++)


- Какая разница между пуганой вороной и письменным столом?
"Вот это совсем другой разговор! - подумала Алиса.- Загадки-то я люблю! Поиграем!"
- Кажется, сейчас отгадаю,- прибавила она вслух.
- Ты думаешь, что могла бы отыскать отгадку? - удивленно спросил Заяц...
                 Льюис Керролл "Алиса в стране чудес"

Чем отличается выражение
1)     Entity cowedCrow( 1);
от выражения
2)     Entity desk = 1;
кроме названия объектов, конечно же?
На удивление многие программисты дают неверный ответ. Менее опытные ошибочно полагают, что во втором случае сначала вызывается конструктор без аргументов, а затем оператор присваивания. Более опытные наивно полагают, что данные выражения эквивалентны (по сути, не отличаются). И, наконец, опытные убеждены, что знают правильный ответ, и готовы прекратить чтение статьи.
Что же, попробуем доставить немного удовольствия опытным программистам, а заодно и развеять заблуждения менее опытных.

воскресенье, 4 марта 2012 г.

Идиома Accessor (C++)

Введение

Идея управления доступом к классу путем использования наследования и внутренних классов пришла ко мне во время работы над одним из проектов. Вполне возможно, что данная идиома уже открыта и используется, однако мне об этом пока ничего не известно. Я буду очень признателен за любую информацию, связанную с данной идиомой.  (см. UPD в конце статьи).
Я благодарю Евгения Слепова, моего коллегу, который оказал мне большую помощь в подготовке данного материала. 

Название и классификация

Акцессор – идиома.

Назначение

Разграничивает интерфейс класса, позволяя без дальнейшей модификации класса указывать, какие клиенты должны иметь доступ к его конкретным (привилегированным) частям.