|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Aleksey Cheusov 2:5020/400 05 Feb 2003 12:04:25 To : Valentin Nechayev Subject : Re: 386SX and RedHat_8.0 -------------------------------------------------------------------------------- .ua> <s93znph6sn5.fsf@cheusov.scnsoft.com> <20030131211357.GB537@iv.nn.kiev.ua> .ua> <s93wukguida.fsf@cheusov.scnsoft.com> <20030204172200.GA377@iv.nn.kiev.ua> From: Aleksey Cheusov <cheusov@scnsoft.com> Valentin Nechayev <netch@segfault.kiev.ua> writes: > AC> [skipped] > >> auto_ptr<zuka> z; ... z.reset(read_zuka()); ... z.release(); > >> > >> (Я не уверен, что reset() и release() везде есть. Я их увидел в > >> SGI'шной доке. Если их нет, надо написать свой аналог.) > AC> В MSVC reset() нет, но суть не в этом. > > В этом. Если там нельзя менять указатель в auto_ptr после его создания, > то нафиг такой auto_ptr сдался. Вот и я говорю. Hафиг его. И без аналогов тоже тепло и сухо ;) > > AC>> Если pure abstract class совсем даже не pure, а совсем наоборот, > > AC>> и содержит виртуальный деструктор, то, конечно, да. > >> А что, в Вашей терминологии класс с виртуальным деструктором не > >> может быть pure abstract? > >> А если этот деструктор тоже абстрактный? Такое ведь разрешено. > AC> ^^^^^^^^^^ ^^^^^^^^^^^ > AC> Ой. А что это? Приведи пример. > > class zuka { > ... > virtual ~zuka() = 0; > }; > > пробовал - работало. В реальных классах надо переопределить. Приведи полный пример. Я не могу сотворить ничего компилябельного. > AC> Что-то я не могу этого себе представить. > AC> IMHO pure abstract class должен описывать функциональность, > AC> а не способ создания/удаления себя, т.е. деструктора там быть не должно. > > Там требуется общий виртуальный деструктор, когда есть работа через указатель > на абстрактный базовый класс, описывающий интерфейс. IMHO: получил, использовал, освободил. Освободил != Удалил. > AC> Создание/Удаление объектов происходит, в общем случае, совсем не там, > AC> где классы могут используются. > > Во-во. > > > AC>> В мелкомягком COM для этого есть для этого специальная функция > > AC>> типа ReleaseInstance или как-то так с reference counter-ом > > AC>> внутри. Hу, это для того быть pure abstract. > >> Переведи. (c) > AC> А что тут переводить? > AC> За создание объектов отвечает class factory. > AC> Приложение (клиент) говорит CoCreateInstance с id > AC> и получает указатель на интерфейс. > AC> Работает с ним и в конце говорит ReleaseInstance. > AC> Количество клиентов считается и, если после вызова > AC> ReleaseInstance становится равным нулю, объект делает > AC> delete *this. > AC> Примерно так. > > OK, но не вижу прямой связи с pure abstract classes. Связь очень простая: pure abstract classes без виртуального наследования в обычных C++ реализациях обеспечивают бинарную совместимость, причём делают интерфейс ОО и дают возможность использовать интерфейсы другими языками. template-based штучки (STL например) так не умеют. (Речь шла о том, как "правильно" писать на C++) И в этом я вижу преимущество. Микромягкий COM и все его надстройки этим пользуется на полную катушку. -- Best regards, Aleksey Cheusov. --- ifmail v.2.15dev5 * Origin: Science Soft (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/1728395d1d6ed.html, оценка из 5, голосов 10
|