alexs писал(а):Проверка при каждом чихе - не есть хорошо.
Пусть ваш интерфейс ввода обеспечит появление корректных данных.
у меня не интерфейс - это всё мне нужно для ODFProc...
есть готовый файл - хмл кстати из .odt, а эти странные типы обозначены в спецификации OASIS Open Docment Format...
поэтому влиять на чтение из файла нет смысла, можно читать и в integer... а вот проверку при записи производить нужно... т.к. все эти типы имеют логическую основу.
можно конечно для каждого поля описываемого класса прописывать Set_ процедуру и в ней осуществлять нужную проверку, но это не удобно - удобнее сразу описать поле определенным типом и в нем контролировать ввод, но тут натыкаюсь на атрибут, или переопределять оператор присваивания чтоб атрибут не вводить при дальнейшем использовании модуля, или через Set_ для каждого свойства и обойтись без этих типов... с типами конечно и код гораздо прозрачней, но переопределять оператор присваивания... хз... буду экспериментировать.
Добавлено спустя 36 минут 43 секунды:AlexVinS писал(а):Главное на мой взгляд избегать утечек памяти при таком подходе. А вобщем должно работать.
как отследить есть утечка или нет?
если в качестве типа свойства используется собственный класс, то при уничтожении класса-владельца данного свойства объект находящийся в этом свойстве может уничтожаться автоматически или его нужно всегда освобождать в деструкторе класса? как отследить все объекты типа TPositiveInteger?
alexs писал(а):Проверка при каждом чихе - не есть хорошо.
в моём случае - это так же страшно как функция Set... прикрепляемая к любому полю создаваемого класса...
Добавлено спустя 47 минут 18 секунд:Free Pascal : Reference guide. писал(а):The difference between objects and classes is mainly that an object is allocated on the stack, as an ordinary record would be, and that classes are always allocated on the heap. In the following example:
Var
A : TSomeObject; // an Object
B : TSomeClass; // a Class
The main difference is that the variable A will take up as much space on the stack as the size of the object (TSomeObject). The variable B, on the other hand, will always take just the size of a pointer on the stack. The actual class data is on the heap.
From this, a second difference follows: a class must always be initialized through its constructor, whereas for an object, this is not necessary. Calling the constructor allocates the necessary memory on the heap for the class instance data.
Может быть описать эти типы не как классы а как объекты
