Показать сообщение отдельно
Старый 23.03.2007, 10:58   #1  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2480 (88) +++++++++
Регистрация: 20.08.2005
! Создание экземпляра класса Dict*
Предлагаю вниманию такой код
X++:
static void JobXXXX(Args _args)
{
    DictTable   dictTable;
    HeapCheck   hc = new HeapCheck();
    ;
    info (strfmt("Кол-во объектов в памяти до создания %1", hc.countObjects(classnum(DictTable))));
    dictTable = new DictTable(0);
    if (dictTable == null) 
        info("Проверка на NULL вернула истину");
    info (strfmt("Кол-во объектов в памяти после создания %1", hc.countObjects(classnum(DictTable))));
    dictTable = null;
    info (strfmt("Кол-во объектов в памяти после присвоения NULL %1", hc.countObjects(classnum(DictTable))));
}
Получается, что проверка на NULL для класса не дает ответа - создался он или нет.
В принципе , такая проверка безопасна, она не позволит обратиться к методам такого класса.Но, пока dictTable (в принципе, это касается всего семейства классов Dict*) находится в области видимости, объект остается в памяти.
По-моему, это ведет к потенциальным утечкам памяти

Такое поведение воспроизводится на ax 3.0 sp3, sp5 с KR2 и без него, ax 4.0 без sp
__________________
Axapta v.3.0 sp5 kr2