Шаг 8.
Библиотека шаблонов классов Borland.
Развитие "сознания" класса. Как задать принадлежность объектов.

    На этом шаге мы рассмотрим способ задания принадлежности объектов.

    Можно задать принадлежность объектов, создав косвенный контейнер, подобный TIArrayAsVector, и вызвав функцию, наследованную из класса TShouldDelete. Например, рассмотрим следующий косвенный контейнер, запоминающий указатели на строковые объекты:

TIАгrayAsVector<string> stuff(100);

    Для того чтобы определить, владеет ли stuff своими объектами (по умолчанию владеет), следует вызвать функцию OwnsElements(), наследованную из класса TShouldDelete:

cout << stuff .OwnsElements() << endl;

    Функция OwnsElements() возвращает истину (1), если контейнер владеет своими объектами, или ложь (0), если нет.

    Для изменения статуса собственности в контейнере следует передать истину или ложь второй перегруженной функции OwnsElement(), которая ничего не возвращает. Вообще неплохо определить константы TRUE и FALSE для облегчения чтения текста программы:

#define TRUE 1  
#define FALSE 0 
...
stuff.OwnsElements(FALSE);    // Запретить владение объектов 

    Такая отмена прав собственности контейнера stuff означает, что объекты не будут удаляться автоматически. Для разрешения автоматического удаления следует вызвать функцию OwnsElements() с аргументом TRUE;

stuff.OwnsElements(TRUE);

    Замечание. Вы не сможете проделать нечто подобное с контейнерными классами, которые хранят сами объекты и не выводятся из TShouldDelete. Если вы создадите такой контейнер следующим образом:
TArrayAsVector<string> stuff2(100);

вы не сможете изменить статус владения объектами stuff2:

stuff2.OwnsElements(TRUE);	// ??? 

При компиляции этого оператора будет выдано сообщение об ошибке "'OwnsEIements' is not a member of 'TArrayAs Vector<string>'" ('OwnsElements' - не член 'TArrayAsVector <string>'), поскольку контейнерные классы, запоминающие сами объекты, не выводятся из класса TShouldDelete. Вы можете задать статус владения только для косвенных контейнеров, которые хранят указатели на объекты.


    На следующем шаге мы рассмотрим использование принадлежности объектов.




Предыдущий шаг Содержание Следующий шаг