<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2696474</guid>
        <pubDate>Tue, 14 Sep 2010 06:33:45 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2696474</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2696144'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Mr.Delphist &#064; <time class="tag-quote__quoted-time" datetime="2010-09-13T19:40:52+04:00">13.09.10, 15:40</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695804'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2010-09-13T10:54:42+00:00">13.09.10, 10:54</time></span><div class='quote '>Зачем так делать? Это лишняя путаница в коде.</div></div><br>
Например, оптимизация с точки зрения performance. Особенно на legacy-коде, когда взять и переписать по уму - без вариантов, ибо релиз на носу.</div></div><br>
Так как это помогает с точки зрения performance?<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Или когда физических ресурсов доступно в разы меньше, чем логических оберток вокруг них (эдаких смарт-хэндлов) - тогда инициализация аттачит инстанс с физическим ресурсом, а деинициализация - детачит.<br>
</div></div><br>
Как это связано с методами init()? То есть вы предлагаете, чтобы код, использующий такие объекты, задумывался о реализации и сам вызывал методы инициализации/деинициализации?<br>
Не лучше ли инкапсулировать это поведение так, чтобы внешний код работал с такими объектами, как с обычными?<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695804'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2010-09-13T10:54:42+00:00">13.09.10, 10:54</time></span><div class='quote '>Скорее всего тут ошибка уровня выше, хотя может я ошибаюсь.<br>
А можно пример такой ситуации? </div></div><br>
Например, когда есть две коллекции разных сущностей, но каждая из них заинтересована в нотификации об изменениях в другой (дабы ре-валидировать себя заново, допустим). Тут в конструкторах создаем, а в init() - оформляем подписки.</div></div>А может нужен просто метод для подписки?<br>
Init - дурацкое название, ибо неясно, что за ним скрывается.]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2696144</guid>
        <pubDate>Mon, 13 Sep 2010 15:40:52 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2696144</link>
        <description><![CDATA[Mr.Delphist: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695804'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2010-09-13T10:54:42+00:00">13.09.10, 10:54</time></span><div class='quote '>Зачем так делать? Это лишняя путаница в коде.</div></div><br>
Например, оптимизация с точки зрения performance. Особенно на legacy-коде, когда взять и переписать по уму - без вариантов, ибо релиз на носу.<br>
Или когда физических ресурсов доступно в разы меньше, чем логических оберток вокруг них (эдаких смарт-хэндлов) - тогда инициализация аттачит инстанс с физическим ресурсом, а деинициализация - детачит.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695804'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2010-09-13T10:54:42+00:00">13.09.10, 10:54</time></span><div class='quote '>Скорее всего тут ошибка уровня выше, хотя может я ошибаюсь.<br>
А можно пример такой ситуации? </div></div><br>
Например, когда есть две коллекции разных сущностей, но каждая из них заинтересована в нотификации об изменениях в другой (дабы ре-валидировать себя заново, допустим). Тут в конструкторах создаем, а в init() - оформляем подписки.]]></description>
        <author>Mr.Delphist</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695804</guid>
        <pubDate>Mon, 13 Sep 2010 10:54:42 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695804</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695798'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Mr.Delphist &#064; <time class="tag-quote__quoted-time" datetime="2010-09-13T10:50:30+00:00">13.09.10, 10:50</time></span><div class='quote '>Обычно тяжеловесные операции лучше не в конструкторе делать, а в методе вроде Init(). Тогда получается двухфазное создание экземпляров:<br>
1) инстанс аллоцирован, но при попытке использования должны кидаться исключения/осетры/что-там-по-правилам-проекта.<br>
2) инстанс инициирован, можно пользовать.</div></div><br>
Зачем так делать? Это лишняя путаница в коде.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Плюс такого подхода может быть в том, что шаг 1 исполняется очень быстро. Эдакий lazy load.</div></div>Смысл?<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Также, если два разных класса используют сервисы друг друга (например, подпиской через абстрактный интерфейс), то возникает парадокс курицы и яйца - непонятно, кого делать первым. А так - инстанциируем в любом порядке, и в init-коде даем ссылки друг на друга.</div></div>Скорее всего тут ошибка уровня выше, хотя может я ошибаюсь.<br>
А можно пример такой ситуации?]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695798</guid>
        <pubDate>Mon, 13 Sep 2010 10:50:30 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695798</link>
        <description><![CDATA[Mr.Delphist: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695785'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>niXman &#064; <time class="tag-quote__quoted-time" datetime="2010-09-13T10:38:25+00:00">13.09.10, 10:38</time></span><div class='quote '>хотя, не могу вспомнить, чтоб в реальных проектах не новичков, встречал такое</div></div><br>
<br>
Обычно тяжеловесные операции лучше не в конструкторе делать, а в методе вроде Init(). Тогда получается двухфазное создание экземпляров:<br>
1) инстанс аллоцирован, но при попытке использования должны кидаться исключения/осетры/что-там-по-правилам-проекта.<br>
2) инстанс инициирован, можно пользовать.<br>
<br>
Плюс такого подхода может быть в том, что шаг 1 исполняется очень быстро. Эдакий lazy load.<br>
Также, если два разных класса используют сервисы друг друга (например, подпиской через абстрактный интерфейс), то возникает парадокс курицы и яйца - непонятно, кого делать первым. А так - инстанциируем в любом порядке, и в init-коде даем ссылки друг на друга.]]></description>
        <author>Mr.Delphist</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695785</guid>
        <pubDate>Mon, 13 Sep 2010 10:38:25 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695785</link>
        <description><![CDATA[niXman: в общем, понятно, никто не против try-catch в конструкторе.<br>
хотя, не могу вспомнить, чтоб в реальных проектах не новичков, встречал такое.<br>
вопрос закрыт. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2010-09-13T10:39:00+00:00">13.09.10, 10:39</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695536'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Hryak &#064; <time class="tag-quote__quoted-time" datetime="2010-09-13T07:11:56+00:00">13.09.10, 07:11</time></span><div class='quote '>Мой пост был исключительно о том, что не всегда инициализация мемберов в initialization list лучше присвоения в теле конструктора.</div></div><br>
буду знать.]]></description>
        <author>niXman</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695536</guid>
        <pubDate>Mon, 13 Sep 2010 07:11:56 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695536</link>
        <description><![CDATA[Hryak: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695420'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>MyNameIsIgor &#064; <time class="tag-quote__quoted-time" datetime="2010-09-13T04:30:19+00:00">13.09.10, 04:30</time></span><div class='quote '>безопасно, если<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695412'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Hryak &#064; <time class="tag-quote__quoted-time" datetime="2010-09-13T03:57:45+00:00">13.09.10, 03:57</time></span><div class='quote '><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">int* p;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script></div></div><br>
описано последним полем, инициализация которого может кинуть исключение</div></div><br>
Кто сказал, что последним? Я же не зря многоточия поставил в описании класса.<br>
Одно дело - когда пишешь тело конструктора и четко видишь, что в нем, и только это влияет на безопасность кода, и другое - когда еще нужно держать в голове последовательность определения полей в классе...<br>
<br>
P.S. Мой пост был исключительно о том, что не всегда инициализация мемберов в initialization list лучше присвоения в теле конструктора.]]></description>
        <author>Hryak</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695461</guid>
        <pubDate>Mon, 13 Sep 2010 05:59:01 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695461</link>
        <description><![CDATA[MyNameIsIgor: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695456'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>LuckLess &#064; <time class="tag-quote__quoted-time" datetime="2010-09-13T05:51:32+00:00">13.09.10, 05:51</time></span><div class='quote '>А при модификации такого класса через год ты будешь помнить обо всех этих &quot;если&quot;?) </div></div><br>
Это уже другой вопрос. Если вы читали топик, то я только &quot;за&quot; применения RAII. Понятно, что смартпоинтер будет лучше голого указателя.]]></description>
        <author>MyNameIsIgor</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695456</guid>
        <pubDate>Mon, 13 Sep 2010 05:51:32 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695456</link>
        <description><![CDATA[LuckLess: <strong class='tag-b'>MyNameIsIgor</strong><br>
А при модификации такого класса через год ты будешь помнить обо всех этих &quot;если&quot;?)]]></description>
        <author>LuckLess</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695420</guid>
        <pubDate>Mon, 13 Sep 2010 04:30:19 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695420</link>
        <description><![CDATA[MyNameIsIgor: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695412'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Hryak &#064; <time class="tag-quote__quoted-time" datetime="2010-09-13T03:57:45+00:00">13.09.10, 03:57</time></span><div class='quote '><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">A() : ..., p(new int) {} // небезопасно</div></ol></div></div></div></div></div></div><br>
Почему? По-моему, безопасно, если<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695412'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Hryak &#064; <time class="tag-quote__quoted-time" datetime="2010-09-13T03:57:45+00:00">13.09.10, 03:57</time></span><div class='quote '><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">int* p;</div></ol></div></div></div></div></div></div><br>
описано последним полем, инициализация которого может кинуть исключение, и тело конструктора не бросает исключений (как, собственно, у вас и есть).]]></description>
        <author>MyNameIsIgor</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695412</guid>
        <pubDate>Mon, 13 Sep 2010 03:57:45 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695412</link>
        <description><![CDATA[Hryak: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695205'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>niXman &#064; <time class="tag-quote__quoted-time" datetime="2010-09-12T17:04:42+00:00">12.09.10, 17:04</time></span><div class='quote '>никогда в конструкторе не инициализирую то, что может бросить исключение. в худшем случае, инициализирую такие свойства в списке инициализаторов</div></div><br>
Если в классе применяется RAII, что должно быть, то пофигу (если не учитывать эффективность), а если нет - то поаккуратнее с <em class='tag-i'>&quot;инициализирую такие свойства в списке инициализаторов&quot;</em><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">class A</div><div class="code_line">{</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp;A() : ..., p(new int) {} // небезопасно, в отличие от </div><div class="code_line">&nbsp;&nbsp;//A() : ... { p = new int; } - &quot;безопасно&quot;, пока не будет меняться тело конструктора так, что станет возможно исключение после строчки p = new int;</div><div class="code_line">&nbsp;&nbsp;~A() { delete p; }</div><div class="code_line">...</div><div class="code_line">&nbsp;&nbsp;int* p;</div><div class="code_line">....</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>Hryak</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695297</guid>
        <pubDate>Sun, 12 Sep 2010 19:12:27 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695297</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695296'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>niXman &#064; <time class="tag-quote__quoted-time" datetime="2010-09-12T19:09:52+00:00">12.09.10, 19:09</time></span><div class='quote '>так, что не понятно, в каком состоянии находятся свойства класса.</div></div><br>
После исключения??? Ни в каком. Объект будет разрушен, а память освобождена.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>а для того, чтоб не городить код, проверяющий/утилизировавший свойства класса...</div></div><br>
Так и не надо его городить.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>проще исключения вообще не генерировать из конструктора. мое имхо.</div></div><br>
Мне кажется, что оно основано на непонимании конструкторов, деструкторов и механизма исключений.]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695296</guid>
        <pubDate>Sun, 12 Sep 2010 19:09:52 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695296</link>
        <description><![CDATA[niXman: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695290'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2010-09-12T19:06:15+00:00">12.09.10, 19:06</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695285'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>niXman &#064; <time class="tag-quote__quoted-time" datetime="2010-09-12T19:02:24+00:00">12.09.10, 19:02</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695209'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2010-09-12T17:10:01+00:00">12.09.10, 17:10</time></span><div class='quote '>А вот это уже непонятно и мало связано с описанным случаем.</div></div><br>
я никогда не допускаю в коде, ситуацию, двусмысленную/неопределенную. сейчас ссылку поищу...</div></div><br>
А как с помощью исключений из конструктора можно допустить двусмысленную ситуацию?</div></div><br>
так, что не понятно, в каком состоянии находятся свойства класса.<br>
а для того, чтоб не городить код, проверяющий/утилизировавший свойства класса, проще исключения вообще не генерировать из конструктора. мое имхо.]]></description>
        <author>niXman</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695290</guid>
        <pubDate>Sun, 12 Sep 2010 19:06:15 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695290</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695285'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>niXman &#064; <time class="tag-quote__quoted-time" datetime="2010-09-12T19:02:24+00:00">12.09.10, 19:02</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695209'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2010-09-12T17:10:01+00:00">12.09.10, 17:10</time></span><div class='quote '>А вот это уже непонятно и мало связано с описанным случаем.</div></div><br>
я никогда не допускаю в коде, ситуацию, двусмысленную/неопределенную. сейчас ссылку поищу...</div></div><br>
А как с помощью исключений из конструктора можно допустить двусмысленную ситуацию?]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695285</guid>
        <pubDate>Sun, 12 Sep 2010 19:02:24 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695285</link>
        <description><![CDATA[niXman: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695209'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2010-09-12T17:10:01+00:00">12.09.10, 17:10</time></span><div class='quote '>А вот это уже непонятно и мало связано с описанным случаем.</div></div><br>
я никогда не допускаю в коде, ситуацию, двусмысленную/неопределенную. сейчас ссылку поищу...]]></description>
        <author>niXman</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695214</guid>
        <pubDate>Sun, 12 Sep 2010 17:17:39 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695214</link>
        <description><![CDATA[Masterkent: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695158'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>vnf &#064; <time class="tag-quote__quoted-time" datetime="2010-09-12T15:52:32+00:00">12.09.10, 15:52</time></span><div class='quote '>Считается что можно поиметь утечку ресурсов<br>
<br>
Например<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">class CA</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;hfile * file;</div><div class="code_line">&nbsp;&nbsp;...</div><div class="code_line">&nbsp;&nbsp;CA(char * filename)</div><div class="code_line">&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; file = OpenFile(filename);</div><div class="code_line">&nbsp;&nbsp; &nbsp; ...</div><div class="code_line">&nbsp;&nbsp; &nbsp; if(...) throw errcode;</div><div class="code_line">&nbsp;&nbsp; &nbsp; ...</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><br>
файл останется открытым.</div></div><br>
При работе с неуправляемыми ресурсами try-catch можно использовать как раз с целью предотвращения утечек.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">class CA</div><div class="code_line">{</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;CA(char const *filename)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;file = OpenFile(filename);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (!file)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw FailedToOpenFile(filename);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.... // код, потенциально генерирующий исключения</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;catch (...)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;CloseFile(file);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;....</div><div class="code_line">private:</div><div class="code_line">&nbsp;&nbsp; &nbsp;hfile *file;</div><div class="code_line">};</div></ol></div></div></div></div><br>
Это, в общем-то, известная идиома.]]></description>
        <author>Masterkent</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695209</guid>
        <pubDate>Sun, 12 Sep 2010 17:10:01 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695209</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695205'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>niXman &#064; <time class="tag-quote__quoted-time" datetime="2010-09-12T17:04:42+00:00">12.09.10, 17:04</time></span><div class='quote '>собственно спор возник из-за того, что коллега, в свойствах класса имеет вектор указателей которые инициализируются при помощи new. я ему сказал, чтоб в векторе хранил смарт-поинтеры, т.к. при инициализации этих самых объектов, есть большая вероятность что кто-то из них бросит исключение.<br>
что он сделал:<br>
в конструкторе, инициализацию этих самых указателей, обернул в try-catch, добавил метод clear(), который вызывает в catch и в деструкторе.</div></div><br>
Тут ты прав.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>собственно я, никогда в конструкторе не инициализирую то, что может бросить исключение. в худшем случае, инициализирую такие свойства в списке инициализаторов(если возможно).<br>
почему? - да хз... просто привычка. не могу вспомнить откуда... с какого-то форума. как найду ссылку на тему - скину.</div></div><br>
А вот это уже непонятно и мало связано с описанным случаем.]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695205</guid>
        <pubDate>Sun, 12 Sep 2010 17:04:42 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695205</link>
        <description><![CDATA[niXman: поясню.<br>собственно спор возник из-за того, что коллега, в свойствах класса имеет вектор указателей которые инициализируются при помощи new. я ему сказал, чтоб в векторе хранил смарт-поинтеры, т.к. при инициализации этих самых объектов, есть большая вероятность что кто-то из них бросит исключение.<br>что он сделал:<br>в конструкторе, инициализацию этих самых указателей, обернул в try-catch, добавил метод clear(), который вызывает в catch и в деструкторе. это меня повергло в шок.<br>собственно я, никогда в конструкторе не инициализирую то, что может бросить исключение. в худшем случае, инициализирую такие свойства в списке инициализаторов(если возможно).<br>почему? - да хз... просто привычка. не могу вспомнить откуда... с какого-то форума. как найду ссылку на тему - скину.]]></description>
        <author>niXman</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695193</guid>
        <pubDate>Sun, 12 Sep 2010 16:49:32 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695193</link>
        <description><![CDATA[Hsilgos: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Считается что можно поиметь утечку ресурсов<br>
...</div></div><br>
Вообще-то приведенный код может спровоцировать утечку ресурсов в любом месте, не только в конструкторе. Нужно контролировать и понимать что ты пишешь.<br>
И вариант решения - освобождать ресурс прежде чем бросить исключение. (в том числе использовать обертку, которая освобождает в деструкторе самостоятельно).]]></description>
        <author>Hsilgos</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695179</guid>
        <pubDate>Sun, 12 Sep 2010 16:35:33 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695179</link>
        <description><![CDATA[D_KEY: <strong class='tag-b'>vnf</strong>, считаю, что ресурсов без владельцев быть вообше не должно. То есть всегда держаться RAII. И костыли в виде всяких init() будут не нужны.]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695163</guid>
        <pubDate>Sun, 12 Sep 2010 16:08:55 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695163</link>
        <description><![CDATA[MyNameIsIgor: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695158'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>vnf &#064; <time class="tag-quote__quoted-time" datetime="2010-09-12T15:52:32+00:00">12.09.10, 15:52</time></span><div class='quote '>вынести открытие файла из конструктора в Init;<br>
вынести код с throw в Init;</div></div><br>
Есть мнение, что это костыли, а не полноценные варианты.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2695158'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>vnf &#064; <time class="tag-quote__quoted-time" datetime="2010-09-12T15:52:32+00:00">12.09.10, 15:52</time></span><div class='quote '>оптимальный вариант - завернуть hfile в класс с закрытием файла в деструкторе( Если ООП так уж ООП во всём) </div></div><br>
Не столько ООП, сколько RAII.]]></description>
        <author>MyNameIsIgor</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695158</guid>
        <pubDate>Sun, 12 Sep 2010 15:52:32 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2695158</link>
        <description><![CDATA[vnf: <strong class='tag-b'>D_KEY</strong><br>
Считается что можно поиметь утечку ресурсов<br>
<br>
Например<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">class CA</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;hfile * file;</div><div class="code_line">&nbsp;&nbsp;...</div><div class="code_line">&nbsp;&nbsp;CA(char * filename)</div><div class="code_line">&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; file = OpenFile(filename);</div><div class="code_line">&nbsp;&nbsp; &nbsp; ...</div><div class="code_line">&nbsp;&nbsp; &nbsp; if(...) throw errcode;</div><div class="code_line">&nbsp;&nbsp; &nbsp; ...</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><br>
файл останется открытым.<br>
<br>
Варианты решения:<br>
вынести открытие файла из конструктора в Init;<br>
вынести код с throw в Init;<br>
оптимальный вариант - завернуть hfile в класс с закрытием файла в деструкторе( Если ООП так уж ООП во всём)<br>
<br>
<strong class='tag-b'>niXman</strong><br>
Считаю правильнее - это не аргумент, у каждого решения должно быть обоснование<br>
<br>
Какие  риски при использовании try-catch в конструкторе?<br>
Я никаких рисков не вижу, вполне можно использовать.]]></description>
        <author>vnf</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2694992</guid>
        <pubDate>Sun, 12 Sep 2010 11:34:58 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2694992</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2694963'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>niXman &#064; <time class="tag-quote__quoted-time" datetime="2010-09-12T10:26:26+00:00">12.09.10, 10:26</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2694957'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2010-09-12T10:21:08+00:00">12.09.10, 10:21</time></span><div class='quote '>А почему?</div></div><br>
потому что, для подобных ситуаций, я считаю, правильней добавить метод init()(или как-то так) и уже его обернуть в try-catch</div></div><br>
Так почему так правильней? <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2010-09-12T11:49:35+00:00">12.09.10, 11:49</time></span></span><br>
И я не понимаю почему ты говоришь о блоке try catch в конструкторе вместе с обсуждением выброса исключений из конструктора, хотя это взаимоисключающие, чаще всего, вещи.]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2694963</guid>
        <pubDate>Sun, 12 Sep 2010 10:26:26 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2694963</link>
        <description><![CDATA[niXman: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2694957'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2010-09-12T10:21:08+00:00">12.09.10, 10:21</time></span><div class='quote '>А почему?</div></div><br>
потому что, для подобных ситуаций, я считаю, правильней добавить метод init()(или как-то так) и уже его обернуть в try-catch]]></description>
        <author>niXman</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2694960</guid>
        <pubDate>Sun, 12 Sep 2010 10:23:46 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2694960</link>
        <description><![CDATA[Hsilgos: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '> в конструкторе никогда не пишу код, который может сгенерировать исключение.</div></div><br>
Это нормальная практика, когда конструктор кидает исключение. Вместе с оператором new, который кидает исключение, это вполне оправдано]]></description>
        <author>Hsilgos</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2694957</guid>
        <pubDate>Sun, 12 Sep 2010 10:21:08 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2694957</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=313096&view=findpost&p=2694945'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>niXman &#064; <time class="tag-quote__quoted-time" datetime="2010-09-12T10:01:08+00:00">12.09.10, 10:01</time></span><div class='quote '>собственно вопрос в том, используете ли Вы try-catch в конструкторе?</div></div><br>
Редко. Обычно лучше пропустить исключение дальше.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>я считаю это неправильным. в конструкторе никогда не пишу код, который может сгенерировать исключение.</div></div><br>
А почему?]]></description>
        <author>D_KEY</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2694954</guid>
        <pubDate>Sun, 12 Sep 2010 10:18:28 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2694954</link>
        <description><![CDATA[Hsilgos: Конструктор сам может генерировать исключение. Объект тогда не создается и память освобождается автоматически. Деструктор не должен кидать исключение. Против try&#092;catch в конструкторе&#092;деструкторе ничего не имею против.]]></description>
        <author>Hsilgos</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2694945</guid>
        <pubDate>Sun, 12 Sep 2010 10:01:08 +0000</pubDate>
        <title>try-catch в конструкторе? оО</title>
        <link>https://forum.sources.ru/index.php?showtopic=313096&amp;view=findpost&amp;p=2694945</link>
        <description><![CDATA[niXman: собственно вопрос в том, используете ли Вы try-catch в конструкторе?<br>я считаю это неправильным. в конструкторе никогда не пишу код, который может сгенерировать исключение.]]></description>
        <author>niXman</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	