Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Создание объекта при помощи фабрики. (число прочтений - 1860 )
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Создание объекта при помощи фабрики.
30. Октября 2009 :: 10:37
Печать  
Имеем:
DefCls.ert
Код
Выбрать все
Класс MyCls = MyCls@MD {}; 



MyCls.ert
Код
Выбрать все
//=================================================
Процедура Конструктор()
	//#curmeth
	вирт()._ВыброситьИскл("Исключение из конструктора!");

КонецПроцедуры	// Конструктор
//=================================================
Процедура Деструктор()
	//#curmeth

КонецПроцедуры	// Деструктор
//=================================================
 



создаем объект в тестовой обработке
Вариант 1:
Код
Выбрать все
Перем MyObj;//глобальная переменная модуля

//*******************************************
Процедура Сформировать()

	Попытка
		MyObj = СоздатьОбъект("MyCls");
	Исключение
		Сообщить("описание ошибки >>> " + ОписаниеОшибки(),"!!!");
	КонецПопытки;

	Сообщить("тип значения MyObj: " + ТипЗначенияСтр(MyObj) + ", ПустоеЗначение(MyObj) = " + ПустоеЗначение(MyObj));
КонецПроцедуры
 


получаем:
i>>> MyCls::Конструктор()
!!! >>> описание ошибки >>> MyCls::Конструктор() : Исключение из конструктора!
вирт()._ВыброситьИскл("Исключение из конструктора!");
{MyCls@MD(4) }
> >>> тип значения MyObj: , ПустоеЗначение(MyObj) = 1
Т.е. все супер - объект не создан.

Вариант 2:
Код
Выбрать все
Перем MyObj;//глобальная переменная модуля

//*******************************************
Процедура Сформировать()

	ФабрикаОбъектов = СоздатьОбъект("ФабрикаОбъектов");
	Попытка
		MyObj = ФабрикаОбъектов.Новый("MyCls");
	Исключение
		Сообщить("описание ошибки >>> " + ОписаниеОшибки(),"!!!");
	КонецПопытки;

	Сообщить("тип значения MyObj: " + ТипЗначенияСтр(MyObj) + ", ПустоеЗначение(MyObj) = " + ПустоеЗначение(MyObj));
КонецПроцедуры
 


получаем:
i>>> MyCls::Конструктор()
!!! >>> описание ошибки >>> MyCls::Конструктор() : Исключение из конструктора!
вирт()._ВыброситьИскл("Исключение из конструктора!");
{MyCls@MD(4) }
> >>> тип значения MyObj: , ПустоеЗначение(MyObj) = 1
Тоже все отлично.
И вариант 3:
Код
Выбрать все
Перем MyObj;//глобальная переменная модуля

//*******************************************
Процедура Сформировать()

	ФабрикаОбъектов = СоздатьОбъект("ФабрикаОбъектов");
	Попытка
		MyObj = ФабрикаОбъектов.Новый("MyCls","Конструктор");
	Исключение
		Сообщить("описание ошибки >>> " + ОписаниеОшибки(),"!!!");
	КонецПопытки;

	Сообщить("тип значения MyObj: " + ТипЗначенияСтр(MyObj) + ", ПустоеЗначение(MyObj) = " + ПустоеЗначение(MyObj));
КонецПроцедуры
 


i>>> MyCls::Конструктор()
> >>> тип значения MyObj: MyCls, ПустоеЗначение(MyObj) = 0

Т.е. в третьем варианте объект создан, исключения не возникло. Но
если мы теперь закрываем форму, в которой тестовый код, т.е. уничтожается переменная MyObj, получаем
err >>> MyCls::Конструктор() : Исключение из конструктора!
вирт()._ВыброситьИскл("Исключение из конструктора!");
{MyCls@MD(4) }

err >>> MyCls::Конструктор() : Исключение из конструктора!
вирт()._ВыброситьИскл("Исключение из конструктора!");
{MyCls@MD(4) }

i>>> MyCls::Деструктор()

Собственно, вот. Кажися что-то тут не так.
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Создание объекта при помощи фабрики.
Ответ #1 - 30. Октября 2009 :: 11:06
Печать  
зы: в третьем варианте, наверно, не совсем понятна логика создания объекта с явным указанием "Конструктор", просто тоже самое происходит при использовании конструктора с параметрами.
Т.е. ФабрикаОбъектов.Новый("MyCls","Конструктор",1,2) для

Процедура Конструктор(пар1,пар2)
КонецПроцедуры
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Создание объекта при помощи фабрики.
Ответ #2 - 31. Октября 2009 :: 05:19
Печать  
Тут, похоже, идет запаздывание отработки исключения в 1С++ Печаль
Создай баг в багзилле, когда-нибудь исправим.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Создание объекта при помощи фабрики.
Ответ #3 - 31. Октября 2009 :: 09:29
Печать  
ЗарегистрировалУлыбка
а исходники 3.0 версии не выкладываете сейчас? На главной странице вроде нету, есть 2.5 и 2.0.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать