//--- example
extern bool make_error;
extern int error;
extern CArrayObj *src;
//--- создаем новый экземпляр CArrayObj
//--- по умолчанию механизм управления памятью в нем включен
CArrayObj *array=new CArrayObj;
//--- добавляем (копируем) элементы из массива-источика
if(array!=NULL)
bool result=array.AddArray(src);
if(make_error)
{
//--- совершаем ошибочные действия
switch(error)
{
case 0:
//--- удаляем массив-источник, не проверив его флаг управления памятью
delete src;
//--- результат:
//--- возможно обращение
//--- по "битому" указателю в массиве-приемнике
break;
case 1:
//--- выключаем механизм управления памятью в массиве-источнике
if(src.FreeMode()) src.FreeMode(false);
//--- но не удаляем массив-источник
//--- результат:
//--- после удаления массива-приемника, возможно обращение
//--- по "битому" указателю в массиве-источнике
break;
case 2:
//--- выключаем механизм управления памятью в массиве-источнике
src.FreeMode(false);
//--- выключаем механизм управления памятью в массиве-приемнике
array.FreeMode(false);
//--- результат:
//--- после завершения программы, получаем "утечку памяти"
break;
}
}
else
{
//--- выключаем механизм управления памятью в массиве-источнике
if(src.FreeMode()) src.FreeMode(false);
//--- удаляем массив-источник
delete src;
//--- результат:
//--- обращение к элементам массива-приемника будет корректным
//--- удаление массива-приемника приведет к удалению его элементов
}