Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменить синтаксис паскаля(делфи) 
:(
    Опции темы
Alexeis
Дата 2.6.2008, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(MAKCim @  2.6.2008,  10:52 Найти цитируемый пост)
поведение управляемо через конструктор копий и operator=
где тут что опасно? 


Цитата(Alexeis @  2.6.2008,  09:06 Найти цитируемый пост)
  Источник ошибок не он сам, а его отсутствие по недосмотру. Его просто нужно делать, но не всегда, пока объект простой он может быть не нужным, но в определенный момент при расширении объекта неожиданно поле член заменяется на указатель, все красиво, оно создается в конструкторе, уничтожается в деструкторе, но теперь для копирования такого объекта уже необходим конструктор копирования. Вот этот момент как раз неочевиден, ведь структурно класс почти не изменился.

  Вот это и называется опасный код, не интуитивный код, который приводит к возникновению ошибок.



Цитата(MAKCim @  2.6.2008,  10:52 Найти цитируемый пост)
объект класса с pure virtual методами (применительно к С++) создать нельзя
работа с такими классами осуществляется через указатели/ссылки, т. е через простые типы, а у них нет ни коструктора, ни деструктора

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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MAKCim
Дата 2.6.2008, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Alexeis, 
Цитата

Источник ошибок не он сам, а его отсутствие по недосмотру. Его просто нужно делать, но не всегда, пока объект простой он может быть не нужным, но в определенный момент при расширении объекта неожиданно поле член заменяется на указатель, все красиво, оно создается в конструкторе, уничтожается в деструкторе, но теперь для копирования такого объекта уже необходим конструктор копирования. Вот этот момент как раз неочевиден, ведь структурно класс почти не изменился.

  Вот это и называется опасный код, не интуитивный код, который приводит к возникновению ошибок.

на вкус и цвет...
это проблема не языка, он предоставляет все возможности для безопасного написания кода
твое дело ими пользоваться или нет

Цитата(Alexeis @  2.6.2008,  12:02 Найти цитируемый пост)
В этой схеме время жизни объекта сервера полностью контролируется клиентами. 


ну пожалуйста, оберни указатель классом и считай ссылки
или пользуйся готовыми реализациями, из того же буста например

Добавлено через 5 минут и 5 секунд
пусть I - интерфейс, obj - объект класса, реализующего интерфейс
выполнены следующие действия
I a = obj
I b = obj
I c = obj

где в этом случае расположен счетчик ссылок на obj? (в каждом из a, b, c?)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Alexeis
Дата 2.6.2008, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



MAKCim, я сейчас не говорю про интерфейсы, как о преимуществе, это уже подробно изжевали в старой теме. Тут я говорю про то что механизм интерфейсов находиться в противоречии с механизмом стековых (не динамических) объектов, так как у последних время жизни от входа в блок до выхода. Подсчет ссылок должен реализовывать объект. Все интерфейсы наследуются от IUnknown, который требует реализации методов подсчета ссылок (поскольку эти методы в нем объявлены). Интерфейс сам по себе не является сущностью. Он не имеет ни каких данных, это лишь протокол доступа к объекту, на деле являющийся чем-то вроде дополнительной таблицы VMT, которая расположена в объекте. Это и есть гарантия того что объект исполняет интерфейс.

Добавлено через 1 минуту и 41 секунду
Цитата(Alexeis @  2.6.2008,  11:43 Найти цитируемый пост)
которая расположена в объекте

точнее в объекте указатель на нее.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 2.6.2008, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



вот за это я и люблю С++, можно создать такой класс, объекты которого нельзя создать в стке, а можно только в куче, и наоборот....
и никаких тебе разговоров о том, что концепция стековых объектов плохо сочетается с концепцией интерфейсов и подсчетом ссылок smile 
PM MAIL Skype GTalk   Вверх
MAKCim
Дата 2.6.2008, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Alexeis @  2.6.2008,  12:43 Найти цитируемый пост)
ут я говорю про то что механизм интерфейсов находиться в противоречии с механизмом стековых (не динамических) объектов, так как у последних время жизни от входа в блок до выхода.

где ты нашел противоречие?
приведи пример


Цитата(Alexeis @  2.6.2008,  12:43 Найти цитируемый пост)
Подсчет ссылок должен реализовывать объект

я правильно понимаю: класс, реализующий любой интерфейс, должен реализовывать методы подсчета ссылок?
если так, на лицо еще один показатель "гибкости"

Это сообщение отредактировал(а) MAKCim - 2.6.2008, 12:59


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Alexeis
Дата 2.6.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(MAKCim @  2.6.2008,  11:57 Найти цитируемый пост)
где ты нашел противоречие?
приведи пример

   smile Время жизни стековых объектов от начала блока, до конца, время жизни, время жизни объекта созданного по запросу клиента( т.е. переменной объекта нет вообще как таковой, получен только его интерфейс) не определенно. фиксированно != не определенно. 

Цитата(MAKCim @  2.6.2008,  11:57 Найти цитируемый пост)
я правильно понимаю: класс, реализующий любой интерфейс, должен реализовывать методы подсчета ссылок?
если так, на лицо еще один показатель "гибкости"

  Ни каких проблем, для этого есть предок в котором уже реализован IUknown. 

Цитата(Lazin @  2.6.2008,  11:54 Найти цитируемый пост)
вот за это я и люблю С++, можно создать такой класс, объекты которого нельзя создать в стке, а можно только в куче, и наоборот....

  Это возможность для появления ошибок, зачем тебе лишняя возможность появления ошибок? Гораздо лучше когда компилятор тебе не даст сделать глупость переведя ошибку из времени исполнения во время компиляции. Это известный принцип. Самые лучшие ошибки это те которые видны на этапе компиляции, потом идут те которые кричат о себе в RunTime, а самые вредные, которые молчат и тихо делают свое черное дело.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
skyboy
Дата 2.6.2008, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(Burka @  1.6.2008,  19:36 Найти цитируемый пост)
skyboy, расширения ide - ты имеешь виду что то типа плагина делать для делфи

да. типа CnPack или ModelMaker CodeExplorer. Впрочем, сам их не делал, потому не могу сказать наверняка, позволят ли они до компиляции неявно делать замену так, чтоб не надо было сохранять файл. 

PM MAIL   Вверх
MAKCim
Дата 2.6.2008, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Alexeis @  2.6.2008,  13:16 Найти цитируемый пост)
Время жизни стековых объектов от начала блока, до конца, время жизни, время жизни объекта созданного по запросу клиента( т.е. переменной объекта нет вообще как таковой, получен только его интерфейс) не определенно. фиксированно != не определенно. 

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

в общем я не вижу никакой опасности

Добавлено @ 13:28
Цитата(Alexeis @  2.6.2008,  13:16 Найти цитируемый пост)
Ни каких проблем, для этого есть предок в котором уже реализован IUknown. 

cтоп
реализации методов в интерфейсе быть не может
допустим у меня есть интерфейс I и класс C, реализующий I
где будет реализация подсчета ссылок?

Это сообщение отредактировал(а) MAKCim - 2.6.2008, 13:30


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Lazin
Дата 2.6.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(Alexeis @  2.6.2008,  13:16 Найти цитируемый пост)
Гораздо лучше когда компилятор тебе не даст сделать глупость переведя ошибку из времени исполнения во время компиляции. Это известный принцип. Самые лучшие ошибки это те которые видны на этапе компиляции, потом идут те которые кричат о себе в RunTime, а самые вредные, которые молчат и тихо делают свое черное дело. 

а я и написал про этап компиляции, если к примеру перегрузить для класса операторы new delete, и сделать их закрытыми, то объект можно будет создать только в стеке

Код

class Stacked
{
    void *operator new (size_t);
    void operator delete (void *);
public:
};
Stacked a;//OK
Stacked* s = new Stacked;//error WTF!!!!


причем достаточно сделать закрытой только одну форму оператора new(delete), в этом примере такое

Код

Stacked* s = new(nothrow) Stacked;//compile time error!!!


не прокатит

Это сообщение отредактировал(а) Lazin - 2.6.2008, 13:34
PM MAIL Skype GTalk   Вверх
Любитель
Дата 2.6.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(Alexeis @  2.6.2008,  12:43 Найти цитируемый пост)
Все интерфейсы наследуются от IUnknown

Интерфейсы - это только COM?!


--------------------
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 2.6.2008, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Любитель @  2.6.2008,  12:36 Найти цитируемый пост)
Интерфейсы - это только COM?!

  Ничуть. Интерфейсы прекрасно работают безо всякого COMa, но они просто совместимы с COM. COM нужен только для межязыкового взаимодействия. При работе внутри приложения написанного только на VCL или приложение + Dll, COM не участвует, работают лишь встроенные механизмы.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Любитель
Дата 2.6.2008, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



А с чего тогда любой интерфейс должен наследоваться от IUnknown?


--------------------
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 2.6.2008, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Lazin, я и не сомневаюсь, что на С++ можно написать Delphi, более того сам компилятор таки написан на билдере. Это все тонкие нюансы, которые не обязательно знать программисту на Delphi. У него есть хороший и главное ПРОСТОЙ инструмент, который много за него делает, причем делает скрыто. Это работает вне зависимости от того знает он что его объекты создаются в куче или не знает. В идеале ему вообще не нужно знать слова указатель. Программист Delphi должен проектировать программу при помощи паттернов, которые реализуются при помощи высокоуровневых средств ООП, которые работают стабильно. Важно не изобретать велосипедов, там где уже все поставлено на поток.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MAKCim
Дата 2.6.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Alexeis, 
ответь на мой вопрос

Цитата(MAKCim @  2.6.2008,  13:27 Найти цитируемый пост)
допустим у меня есть интерфейс I и класс C, реализующий I
где будет реализация подсчета ссылок?




--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Alexeis
Дата 2.6.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 14
Всего: 459



Цитата(Любитель @  2.6.2008,  12:56 Найти цитируемый пост)
А с чего тогда любой интерфейс должен наследоваться от IUnknown? 

  Это происходит неявно вне зависимости от желания программиста. Если его не указать, то Delphi без спроса его туда скрыто пропишет. На этом основан механизм подсчета ссылок.

Добавлено через 2 минуты и 40 секунд
MAKCim, я уже писал, что интерфейс не самостоятельная сущность. Сам он ничего не умеет. Подсчет ссылок целиком и полностью лежит на объекте.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.0653 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.