Re[15]: Кодт и remark ушли с rsdn ?
От: Олег К.  
Дата: 05.08.12 18:10
Оценка:
Признаюсь, это я напутал. Пошел к Страуструпу сейчас на страничку. Он в самом деле просто объявляет а не определяет приватные функции. Надо будет посмотреть еще в книге.

How do we avoid this? The simplest solution is to prevent copying by making the operations that copy private: 

    class Handle {
    private:
        string name;
        X* p;

        Handle(const Handle&);    // prevent copying
        Handle& operator=(const Handle&);
    public:
        Handle(string n)
            :name(n), p(0) { /* acquire the X called "name" and let p point to it */ }
        ~Handle() { delete p; /* release X called "name" */ }
        // ...
    };

    void f(const string& hh)
    {
        Handle h1(hh);
        Handle h2 = h1;    // error (reported by compiler)
        // ...
    }


Здесь.

ОК>>>>operator T () const объявлен но не определен (может определили за пределами структуры но меня ломает лезть в статью).

N>>>Пропускают определение целенаправленно, так что тут всё корректно.
ОК>>Не думаю.
N>Это не вопрос для размышлений, это приём такой, старый и действенный.

Нелогичность тут, однако. Как поступит компилятор с просто объявленными (но неопределенными) public и protected функциями которые нигде не вызываются?

ОК>>>>Компилятор видимо пропустил.

N>>>Правильно сделал. Никогда не сталкивался с конструкцией вида:
N>>>
N>>>private:
N>>>ClassName(ClassName const&);
N>>>ClassName& operator=(ClassName const&);
N>>>

N>>>?

ОК>>Ты путаешь немного, имхо. Страуструп когда объясняет такие конструкции все равно пишет пустые тела или какой-нибудь минимальный return а не просто объявления (как ты тут написал).

N>Не путаю, тут тот же случай. Реализация просто не нужна, поэтому во избежание ошибок и недоразумений её лучше не писать.

ОК>>>>Я бы написал operator T () const { return T(); } но это все мелочи.

N>>>Сделал бы лишнюю работу.
ОК>>Не думаю и не повредило бы.
N>Повредила бы. Лишний код, простор для ошибок.

ОК>>>>У меня вообще посыл был в том что это все ненужные навороты.

N>>>Когда всякие автогенераторы пишешь, парсеры, библиотеки и т.п. подобные вещи необходимы и сильно уменьшают время разработки.
ОК>>-1. Ненужный код и
N>Ты только что рассказывал как ты лишний код пишешь

Вообще-то, повторюсь, я бы такие навороты не стал писать в первую очередь.

ОК>>ненужная дополнительная complexity.

N>При профессиональном подходе — наоборот. Введение локальной сложности сильно упрощает систему в целом. Многократно проверено.

Ты, видимо, мало поддерживал кода написанного другими с таким же мнением как и у тебя.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.