    Как задать принадлежность объектов 

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

    TIArrayAsVector<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 означает, что объекты не 
будут удаляться автоматически. Для разрешения автоматического удаления следует 
вызвать функцию OwnsElementsO с аргументом TRUE: 

    stuff.OwnsElements(TRUE);	


    ЗАМЕЧАНИЕ 

    Вы не сможете проделать нечто подобное с контейнерными классами, которые 
хранят сами объекты и не выводятся из TShouldDelete. Если вы создадите такой 
контейнер следующим образом: 

    TArrayAsVector<strmg> stuff2(100); , 

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

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

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


    Как использовать принадлежность объектов 

    После задания статуса владения объектами для косвенного контейнера можно 
вызвать функции-члены для удаления одного или нескольких объектов из 
контейнера и, возможно, удаления при этом самих объектов. В листинге 16.4 
демонстрируются несколько основных приемов. 

    Листинг 16.4.  OWNER.CPP (демонстрация принадлежности объектов) 

    1:	#include <iostream.h>               
    2:	#include <cstring.h>           
    3:	#include <classlib\arrays. h>                            
    4: 
    5:	// Определить алиасы имен типов 
    6:	typedef TIArrayAsVector<string> TContainer; 
    7: 
    8.	typedef TIArrayAsVectorlterator<string> TIterator;	
    9:	// Прототип функции отображения содержимого контейнера	
    10:	void ShowMe(const char «msg, TContainer &cr);
    11:		
    12:	int main()	
    13:	{ 
    14:	  TContainer *cp;   // Указатель на контейнер 
    15:	  string s("Tulips"); // Строковый объект	
    16: 
    17:	  // Создать контейнер и отобразить его права владения 
    18:	  ср = new TContainer(10, 0, 10);	
    19:	  cout « endl;                                  
    20:	  cout « "Array owns objects: ";	
    21:	  if (cp->OwnsElements()) 


    434	Часть IV. Разработка приложений 
