- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
void XmlElementHandler::startElement(
const XMLCh* const uri,
const XMLCh* const localname,
const XMLCh* const qname,
const XERCES_CPP_NAMESPACE_QUALIFIER Attributes& attrs
)
{
static XmlContext *context = XmlContext::getInstance();
static XmlParser *parser = XmlParser::getInstance();
absolut 23.11.2010 22:49 # 0
Govnoeb 23.11.2010 23:23 # 0
я че-то неодупляю.
XmlContext и XmlParser singleton classы?
absolut 23.11.2010 23:38 # 0
Dummy00001 24.11.2010 01:41 # 0
interested 24.11.2010 09:07 # 0
Да, переменные статические; да, живут после завершения функции-члена. Но они же прямо в самом начале без всяких условий слева от присваивания. С чего бы вдруг не выполнять ::getInstance()? Может быть объект по дороге убили, и указатель стал неверный... Как быть уверенным, что в какой-нибудь момент не потребуется действительно "пересоздать" объект?
absolut 24.11.2010 14:34 # 0
interested 24.11.2010 16:10 # −6
Статические переменные, по стандарту, инициализируются нулём ещё до первого использования.
Здесь будет "="-присваивание, которое будет отрабатывать постоянно.
Единожды инициализированные и неизменные величины -- константы.
absolut 24.11.2010 16:27 # 0
Статически переменные инициализируются нулем, если их не инициализировали явно.
interested 24.11.2010 17:46 # 0
Декларация, конечно же, отработает единожды.
В коде именно она.
Меня передёрнуло, прошу прощение.
Будет экономия от вызовов.
Прошу прощения.
Dummy00001 24.11.2010 16:35 # +1
это как бы основное свойство стачиский переменных что они сохраняют свое значение между вызовами функции. инициализировать их постоянно идет против смысла ихнего существования.
interested 24.11.2010 17:53 # 0
Objects with static storage duration (3.7.1) shall be zero-initialized (8.5) before any other initialization takes place.
Более того:
Every object of static storage duration shall be zero-initialized at program startup
Govnoeb 25.11.2010 01:30 # 0
Govnoeb 24.11.2010 15:38 # 0
XmlContext *context и XmlParser *parser я бы сделал static членами данных класса XmlElementHandler и добавил бы const перед *
Sauron 24.11.2010 23:08 # 0