<tagezi>
что значит бросить, что он будет дальше делать?
<tagezi>
то что после исключений идёт?
<mikekaganski>
нет
<tagezi>
а что?
<tagezi>
оно будет работать как брайк?
<mikekaganski>
оно вылетит из функции до обработчика следующего уровня
<mikekaganski>
то есть она может вылететь не только из этой, но и из вызывающих
<mikekaganski>
пока обработчик не найдёт
<tagezi>
тоесть оно эквеволетно ретёрн; только более глобально
<tagezi>
нахренвсё, вернусь к рождению
<mikekaganski>
Насчёт "даже проверки не нужно" - это не стоит делать, лучше оставить как там стоит, с проверкой. Например, может не быть индикатора при headless-кужиме
<mikekaganski>
ага
<tagezi>
получается,что я просто копипасчу 519 и 520 строки
<mikekaganski>
это как же мне надо было исхитриться так, чтобы написать "кужиме"?
<tagezi>
4 раза
<mikekaganski>
я бы не стал так
<mikekaganski>
это именно то, что ты назвал "в лоб"
<tagezi>
да, в лоб
<tagezi>
по уму, можно сделать инлайн функцию
<tagezi>
mxStatusIndicator член, и мне даже пересылать ничего не нужно
<tagezi>
или, можно прописать в дескрипторе
<mikekaganski>
я предполагал RAII, как мы делали в прошлый раз - с маленьким объектом, единственная цель которого - это ресетить индикатор в деструкторе
<tagezi>
ага, я понял, это интересно
<tagezi>
только тогда у меня вопрос, если так делать, то лучше вынести всю работу с прогресиндикатором в класс
<tagezi>
а я не совсем понимаю как вызывается void OOXMLDocumentImpl::incrementProgress()
<tagezi>
она публик
<tagezi>
или сдулать класс только на создание и разрушение объекта?
<tagezi>
тоесть в конструктор уйдет 445-448, а в деструктор 519-520
<tagezi>
как-то так
<tagezi>
так, нет, нужно думать
<tagezi>
mikekaganski: ладно, я подумаю, потом скажу как это вижу
<tagezi>
киви странный како-то, он вообще не думает об удобстве других
<mikekaganski>
я - нет
<tagezi>
я бы на его месте нача с чего-нибудь более простого
<tagezi>
но он какой-то упертый
<tagezi>
и как выясняется, иногда нужно попробовать несколько рекомендованных способов, чтобы найти тот другой, который реально будет работать как хочется :))
<tagezi>
бедный бескрылый птиц :)
<tagezi>
mikekaganski: тут?
<mikekaganski>
тут
<tagezi>
слушай, а можно не создавать же класс новый, а просто в этом деструкторе класса прописать освобождение объекта
<tagezi>
каждый раз когда переменная дочернего класса будет освобождаться, будет срабатывать деструктор этого класса и статус индикатор будет освобождаться
<tagezi>
и я не совсем понимаю, как это будет работать, если я сделаю подкласс
<tagezi>
если объект член, он вообще будет освобождаться до завершения процесса, который его вызвал
<tagezi>
?
<mikekaganski>
я тебя не понял. Мы про какие объекты сейчас говорим? про индикатор или про OOXMLDocumentImpl?
<mikekaganski>
давай сначала про индикатор
<tagezi>
хорошо, про индикатор
<mikekaganski>
индикатор передаётся в конструктор с помощью объекта-ссылки
<tagezi>
да
<mikekaganski>
В OOXMLDocumentImpl он тоже хранится в виде ссылки
<mikekaganski>
то есть ссылка указывает на объект, созданный вне объекта
<mikekaganski>
каждая ссылка увеличивает счётчик использований объекта индикатора
<mikekaganski>
при уничтожении ссылки счётчик уменьшается, при обнулении объект уничтожится
<mikekaganski>
но у нас класс не первый создал этот объект, так что он увеличил счётчик из ненулевой позиции, и при своём уничтожении уменьшит до ненулевой
<mikekaganski>
так что сам индикатор не будет уничтожен, только одна из ссылок на него
<mikekaganski>
вопросы?
JohnDoe_71Rus has quit [Quit: Miranda IM! Smaller, Faster, Easier. http://miranda-im.org]
<tagezi>
это понятно
<mikekaganski>
ок
<tagezi>
поэтому объект должен быть уничтожен руками
<mikekaganski>
?
<mikekaganski>
зачем его уничтожать?
<mikekaganski>
давай без слова "объект"
<mikekaganski>
а то непонятно
<tagezi>
хорошо
<tagezi>
индикатор нужно уничтожить, так как он остается
<mikekaganski>
индикатор нужно сбросить, а не уничтожить
<mikekaganski>
mxStatusIndicator->end();
<tagezi>
это сброс?
<mikekaganski>
да
<mikekaganski>
объект не уничтожится
<mikekaganski>
просто скроется и забудет состояние
<mikekaganski>
(сколько на нём процентов)
<tagezi>
хорошо, но видимость Индикатора весь класс, он член класса
<mikekaganski>
эта функция тоже используется в границах resolve
<tagezi>
нет, она не используется там
<tagezi>
если только не считаешь коментарий :)
<mikekaganski>
в начале функции индикатор готовится (настраивает границы), затем функция создаёт парсер и передаёт свой объект этому парсеру, парсер парсит и в этом процессе вызывает incrementProgress, затем возвращается в функцию
<mikekaganski>
так что incrementProgress используется в этих границах, хоть и опосредованно
<tagezi>
хорошо, я кажеться понимаю
<tagezi>
но это не изменяет видимость объекта
<tagezi>
СтатусИндикатора*
<tagezi>
если его не делать членом класса, то его нужно будет пинать туда сюда
<tagezi>
или нет
<tagezi>
это ссылка, значение меняется, есть в функции resolve можно отказаться от члена
<tagezi>
а переменная будет жить до завершения функции
<tagezi>
а член можно не трогать, пусть живет, он будет работать только в incrementProgress
<tagezi>
так чтоли?
<mikekaganski>
вроде так (если я тебя правильно понял) - давай посмотрим на код :)
<mikekaganski>
ты свою переменную инициализируешь так: StatusIndicator xStatusIndicator = mxStatusIndicator
<mikekaganski>
так вот, этот синтаксис рекомендуется использовать только тогда, когда класс является как бы другой формой того же самого. То есть может заменять исходный объект
<tagezi>
а буду StatusIndicator xStatusIndicator = StatusIndicator(mxStatusIndicator)
<mikekaganski>
В твоём случае твой класс, хоть и содержит индикатор, но не может использоваться вместо него
<mikekaganski>
Лучше StatusIndicator xStatusIndicator(mxStatusIndicator)
<tagezi>
хорошо..
<tagezi>
но в чем разница, что за явное преобразование?
<tagezi>
чем оно отличается от обычного?
<mikekaganski>
просто конструктор объявляется с дополнительным словом