<?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=413448&amp;view=findpost&amp;p=3777099</guid>
        <pubDate>Thu, 30 Aug 2018 09:42:01 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777099</link>
        <description><![CDATA[JoeUser: <div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777097'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T12:39:26+03:00">30.08.18, 09:39</time></span><div class='quote '>Ребят, вы в Холивары не хотите переехать?</div></div><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777098'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T09:41:40+00:00">30.08.18, 09:41</time></span><div class='quote '>Ну можно и в холивары, я не против. </div></div><br>
Не, я пожалуй пойду выпью чаю и съем еще французских булочек 8-) Киля - победил.<br>
</div></div>]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777098</guid>
        <pubDate>Thu, 30 Aug 2018 09:41:40 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777098</link>
        <description><![CDATA[Wound: Ну можно и в холивары, я не против.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777097</guid>
        <pubDate>Thu, 30 Aug 2018 09:39:26 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777097</link>
        <description><![CDATA[Qraizer: Ребят, вы в Холивары не хотите переехать? Бо как ТС спросил вас, как ему сложить три сущности, а вы втираете ему про алгебру Ли и разбираете разницы гомоморфизмов своих разных методов сложения.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777096</guid>
        <pubDate>Thu, 30 Aug 2018 09:17:39 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777096</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777094'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T09:03:53+00:00">30.08.18, 09:03</time></span><div class='quote '>Ваще ниче не понял в твоей задумке&#33; Но это жесть ... Я бы еще разделил на нуль для надежности &#33;&#33;&#33; :blink:</div></div><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">void SomeFunction(std::unique_ptr&#60;SomeClass&#62;&amp;&amp; obj)</div><div class="code_line">{</div><div class="code_line">&nbsp;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp; std::unique_ptr&#60;SomeClass&#62; pObj(Singleton&#60;SomeClass&#62;::Instance());</div><div class="code_line">&nbsp;&nbsp; &nbsp; SomeFunction(std::move(pObj));</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
?? И выхватить исключение?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777094'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T09:03:53+00:00">30.08.18, 09:03</time></span><div class='quote '>Надо и в Инит добавлять 8-)</div></div><br>
А зачем? В конструкторах что исключения плохо бросать? :huh:  А если мне нужно кинуть в Init исключение? Что мне делать то?]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777094</guid>
        <pubDate>Thu, 30 Aug 2018 09:03:53 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777094</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777090'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T08:30:49+00:00">30.08.18, 08:30</time></span><div class='quote '>Во, попробовал поиграться с твоим кодом, выхватил по щам в рантайме:</div></div><br>
Ваще ниче не понял в твоей задумке&#33; Но это жесть ... Я бы еще разделил на нуль для надежности &#33;&#33;&#33; :blink: <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2018-08-30T09:05:52+00:00">30.08.18, 09:05</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777093'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T08:53:18+00:00">30.08.18, 08:53</time></span><div class='quote '>В Init тоже добавишь?</div></div><br>
Надо и в Инит добавлять  8-)]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777093</guid>
        <pubDate>Thu, 30 Aug 2018 08:53:18 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777093</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777091'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T08:47:51+00:00">30.08.18, 08:47</time></span><div class='quote '>A добавлю в описалово noexcept - только попробуй выбросить необработанное исключение :lol:</div></div><br>
В Init тоже добавишь?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777091'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T08:47:51+00:00">30.08.18, 08:47</time></span><div class='quote '>В каком месте кода?</div></div><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">template&#60;typename T&#62;</div><div class="code_line">struct Holder {</div><div class="code_line">&nbsp;&nbsp; Holder() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Holder()::Holder()&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (!Self) &nbsp;Self = new T();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Self-&#62;Init();</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;&nbsp; ~Holder() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (Self) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Self-&#62;Cleanup();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; delete Self;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; std::cout &#60;&#60; &quot;~Holder()::Holder()&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;&nbsp; T* Self = nullptr;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">////////////////////////////////////////////////////////////////////////////////////////</div><div class="code_line">&nbsp;</div><div class="code_line">template &#60;typename T&#62;</div><div class="code_line">class Singleton {</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp; static T* Instance() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Singlton::Instance()&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;static Holder&#60;T&#62; Dummy;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return Dummy.Self;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">private:</div><div class="code_line">&nbsp;&nbsp; Singleton() = delete;</div><div class="code_line">&nbsp;&nbsp; Singleton(Singleton const&amp;) = delete;</div><div class="code_line">&nbsp;&nbsp; Singleton&amp; operator= (Singleton const&amp;) = delete;</div><div class="code_line">&nbsp;&nbsp; Singleton(Singleton const&amp;&amp;) = delete;</div><div class="code_line">&nbsp;&nbsp; Singleton&amp; operator= (Singleton const&amp;&amp;) = delete;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class SomeClass</div><div class="code_line">{</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp; void Init() </div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;connect();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;initialize();</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; void Cleanup() </div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;disconnect();</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; void connect()</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;connect&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; void disconnect()</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;disconnect&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; void initialize()</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;initialize&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;throw &quot;Aaaaaaaaaaaaaaaaa&quot;;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;&nbsp; int member;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">int main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;auto pInst = Singleton&#60;SomeClass&#62;::Instance();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;pInst-&#62;member = 10;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; pInst-&#62;member &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;&nbsp; auto pInst = Singleton&#60;SomeClass&#62;::Instance();</div><div class="code_line">&nbsp;&nbsp; pInst-&#62;member = 20;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; return 0;</div><div class="code_line">}</div></ol></div></div></div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2018-08-30T08:55:17+00:00">30.08.18, 08:55</time></span></span><br>
Вот:<br>
<a class='tag-url' href='https://ideone.com/8l75us' target='_blank'>https://ideone.com/8l75us</a><br>
Потерял ресурс, выхватил дедлок, не закрыл соединение, получил мемори лик...]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777091</guid>
        <pubDate>Thu, 30 Aug 2018 08:47:51 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777091</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777090'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T08:30:49+00:00">30.08.18, 08:30</time></span><div class='quote '>метод Cleanup - ни к селу ни к городу.</div></div><br>
A добавлю в описалово <strong class='tag-b'>noexcept</strong> - только попробуй выбросить необработанное исключение  :lol: <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777090'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T08:30:49+00:00">30.08.18, 08:30</time></span><div class='quote '>Твой код не удовлетворяет RAII</div></div><br>
В каком месте кода?]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777090</guid>
        <pubDate>Thu, 30 Aug 2018 08:30:49 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777090</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777089'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T08:18:19+00:00">30.08.18, 08:18</time></span><div class='quote '>Блин :lool: Ну так твой MyType и есть мой Global &#33;&#33;&#33;</div></div><br>
Нет, у меня MyType - это структура это отдельный тип, который агрегирует в себе 7 переменных разных типов, и передается в синглентон. У тебя твой Holder может принять ровно 1 объект одного типа, и зачем то вызывает для него Init в конструкторе и Cleanup в деструкторе. <br>
Моя структура чем то отдаленно похожа на твой класс Global, и то я не уверен в этом.<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777089'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T08:18:19+00:00">30.08.18, 08:18</time></span><div class='quote '>Не пробовал, не знаю. Заверни его в структуру или класс и передай. Надо пробовать.</div></div><br>
Так я тебе скажу - оно не скомпилируется. А потом, если допустим даже предположить, что я завернул свой shared_ptr в класс и определил там методы Init и Cleanup - то даже в этом случае твой код небезопасен в плане исключений, потому как не дай бог у меня внутри функции Init что то понасоздается, а потом вдруг произойдет исключение в ней же. Все, каюк утечка ресурсов обеспечена.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777089'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T08:18:19+00:00">30.08.18, 08:18</time></span><div class='quote '>А можешь и забыть. А ненаследованный класс тебя заставит не забыть.</div></div><br>
Я так не пишу, соответственно и забывать мне нечего. Твой код не удовлетворяет RAII, соответственно он не безопасный.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777089'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T08:18:19+00:00">30.08.18, 08:18</time></span><div class='quote '>Подавляй. Считай - это полноценная часть деструктора. В деструкторе же ты не собираешься бросать исключения? Или собираешься? :)</div></div><br>
Дело в том, что деструктор - это часть языковой конструкции класса, поведение которой четко оговорено, и я знаю что от него ожидать или нет. А твой метод Cleanup - ни к селу ни к городу. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2018-08-30T08:44:34+00:00">30.08.18, 08:44</time></span></span><br>
Во, попробовал поиграться с твоим кодом, выхватил по щам в рантайме:<br>
<a class='tag-url' href='https://ideone.com/VP5Y8i' target='_blank'>https://ideone.com/VP5Y8i</a><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">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;memory&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">template&#60;typename T&#62;</div><div class="code_line">struct Holder {</div><div class="code_line">&nbsp;&nbsp; Holder() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Holder()::Holder()&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (!Self) &nbsp;Self = new T();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Self-&#62;Init();</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;&nbsp; ~Holder() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (Self) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Self-&#62;Cleanup();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; delete Self;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; std::cout &#60;&#60; &quot;~Holder()::Holder()&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;&nbsp; T* Self = nullptr;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class SomeClass</div><div class="code_line">{</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp; void Init(){}</div><div class="code_line">&nbsp;&nbsp; void Cleanup() {}</div><div class="code_line">&nbsp;&nbsp; int member;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">////////////////////////////////////////////////////////////////////////////////////////</div><div class="code_line">&nbsp;</div><div class="code_line">template &#60;typename T&#62;</div><div class="code_line">class Singleton {</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp; static T* Instance() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Singlton::Instance()&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;static Holder&#60;T&#62; Dummy;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return Dummy.Self;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">private:</div><div class="code_line">&nbsp;&nbsp; Singleton() = delete;</div><div class="code_line">&nbsp;&nbsp; Singleton(Singleton const&amp;) = delete;</div><div class="code_line">&nbsp;&nbsp; Singleton&amp; operator= (Singleton const&amp;) = delete;</div><div class="code_line">&nbsp;&nbsp; Singleton(Singleton const&amp;&amp;) = delete;</div><div class="code_line">&nbsp;&nbsp; Singleton&amp; operator= (Singleton const&amp;&amp;) = delete;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">int main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;auto pInst = Singleton&#60;SomeClass&#62;::Instance();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;pInst-&#62;member = 10;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; pInst-&#62;member &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::unique_ptr&#60;SomeClass&#62; pObj(pInst);</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;&nbsp; auto pInst = Singleton&#60;SomeClass&#62;::Instance();</div><div class="code_line">&nbsp;&nbsp; pInst-&#62;member = 20;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; return 0;</div><div class="code_line">}</div></ol></div></div></div></div><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">*** Error in `./prog&#39;: double free or corruption (fasttop): 0x0000557abbacbc30 ***</div><div class="code_line">======= Backtrace: =========</div><div class="code_line">/lib/x86_64-linux-gnu/libc.so.6(+0x70bcb)[0x2ba3cbcb8bcb]</div><div class="code_line">/lib/x86_64-linux-gnu/libc.so.6(+0x76f96)[0x2ba3cbcbef96]</div><div class="code_line">/lib/x86_64-linux-gnu/libc.so.6(+0x7778e)[0x2ba3cbcbf78e]</div><div class="code_line">./prog(+0xe77)[0x557ab9b48e77]</div><div class="code_line">/lib/x86_64-linux-gnu/libc.so.6(+0x35920)[0x2ba3cbc7d920]</div><div class="code_line">/lib/x86_64-linux-gnu/libc.so.6(+0x3597a)[0x2ba3cbc7d97a]</div><div class="code_line">/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf8)[0x2ba3cbc682b8]</div><div class="code_line">./prog(+0xd4a)[0x557ab9b48d4a]</div><div class="code_line">======= Memory map: ========</div><div class="code_line">2ba3caf68000-2ba3caf8b000 r-xp 00000000 fd:00 2840974 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/lib/x86_64-linux-gnu/ld-2.24.so</div><div class="code_line">2ba3caf8b000-2ba3caf8f000 rw-p 00000000 00:00 0 </div><div class="code_line">2ba3caf98000-2ba3caf9d000 rw-p 00000000 00:00 0 </div><div class="code_line">2ba3cb18b000-2ba3cb18c000 r--p 00023000 fd:00 2840974 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/lib/x86_64-linux-gnu/ld-2.24.so</div><div class="code_line">2ba3cb18c000-2ba3cb18d000 rw-p 00024000 fd:00 2840974 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/lib/x86_64-linux-gnu/ld-2.24.so</div><div class="code_line">2ba3cb18d000-2ba3cb18e000 rw-p 00000000 00:00 0 </div><div class="code_line">2ba3cb18e000-2ba3cb300000 r-xp 00000000 fd:00 2967755 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22</div><div class="code_line">2ba3cb300000-2ba3cb500000 ---p 00172000 fd:00 2967755 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22</div><div class="code_line">2ba3cb500000-2ba3cb50a000 r--p 00172000 fd:00 2967755 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22</div><div class="code_line">2ba3cb50a000-2ba3cb50c000 rw-p 0017c000 fd:00 2967755 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.22</div><div class="code_line">2ba3cb50c000-2ba3cb510000 rw-p 00000000 00:00 0 </div><div class="code_line">2ba3cb510000-2ba3cb613000 r-xp 00000000 fd:00 2841003 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/lib/x86_64-linux-gnu/libm-2.24.so</div><div class="code_line">2ba3cb613000-2ba3cb812000 ---p 00103000 fd:00 2841003 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/lib/x86_64-linux-gnu/libm-2.24.so</div><div class="code_line">2ba3cb812000-2ba3cb813000 r--p 00102000 fd:00 2841003 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/lib/x86_64-linux-gnu/libm-2.24.so</div><div class="code_line">2ba3cb813000-2ba3cb814000 rw-p 00103000 fd:00 2841003 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/lib/x86_64-linux-gnu/libm-2.24.so</div><div class="code_line">2ba3cb814000-2ba3cb82a000 r-xp 00000000 fd:00 2840941 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/lib/x86_64-linux-gnu/libgcc_s.so.1</div><div class="code_line">2ba3cb82a000-2ba3cba29000 ---p 00016000 fd:00 2840941 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/lib/x86_64-linux-gnu/libgcc_s.so.1</div><div class="code_line">2ba3cba29000-2ba3cba2a000 r--p 00015000 fd:00 2840941 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/lib/x86_64-linux-gnu/libgcc_s.so.1</div><div class="code_line">2ba3cba2a000-2ba3cba2b000 rw-p 00016000 fd:00 2840941 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/lib/x86_64-linux-gnu/libgcc_s.so.1</div><div class="code_line">2ba3cba2b000-2ba3cba43000 r-xp 00000000 fd:00 2840960 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/lib/x86_64-linux-gnu/libpthread-2.24.so</div><div class="code_line">2ba3cba43000-2ba3cbc42000 ---p 00018000 fd:00 2840960 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/lib/x86_64-linux-gnu/libpthread-2.24.so</div><div class="code_line">2ba3cbc42000-2ba3cbc43000 r--p 00017000 fd:00 2840960 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/lib/x86_64-linux-gnu/libpthread-2.24.so</div><div class="code_line">2ba3cbc43000-2ba3cbc44000 rw-p 00018000 fd:00 2840960 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/lib/x86_64-linux-gnu/libpthread-2.24.so</div><div class="code_line">2ba3cbc44000-2ba3cbc48000 rw-p 00000000 00:00 0 </div><div class="code_line">2ba3cbc48000-2ba3cbddd000 r-xp 00000000 fd:00 2841097 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/lib/x86_64-linux-gnu/libc-2.24.so</div><div class="code_line">2ba3cbddd000-2ba3cbfdc000 ---p 00195000 fd:00 2841097 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/lib/x86_64-linux-gnu/libc-2.24.so</div><div class="code_line">2ba3cbfdc000-2ba3cbfe0000 r--p 00194000 fd:00 2841097 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/lib/x86_64-linux-gnu/libc-2.24.so</div><div class="code_line">2ba3cbfe0000-2ba3cbfe2000 rw-p 00198000 fd:00 2841097 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/lib/x86_64-linux-gnu/libc-2.24.so</div><div class="code_line">2ba3cbfe2000-2ba3cbfe6000 rw-p 00000000 00:00 0 </div><div class="code_line">2ba3cc000000-2ba3cc021000 rw-p 00000000 00:00 0 </div><div class="code_line">2ba3cc021000-2ba3d0000000 ---p 00000000 00:00 0 </div><div class="code_line">557ab9b48000-557ab9b4a000 r-xp 00000000 fd:00 23353346 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /home/g1NiFf/prog</div><div class="code_line">557ab9d49000-557ab9d4a000 r--p 00001000 fd:00 23353346 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /home/g1NiFf/prog</div><div class="code_line">557ab9d4a000-557ab9d4b000 rw-p 00002000 fd:00 23353346 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /home/g1NiFf/prog</div><div class="code_line">557abbab9000-557abbaeb000 rw-p 00000000 00:00 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[heap]</div><div class="code_line">7fff4aec3000-7fff4aee4000 rw-p 00000000 00:00 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[stack]</div><div class="code_line">7fff4afee000-7fff4aff0000 r-xp 00000000 00:00 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[vdso]</div><div class="code_line">7fff4aff0000-7fff4aff2000 r--p 00000000 00:00 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[vvar]</div><div class="code_line">ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[vsyscall]</div></ol></div></div></div></div><br>
<br>
Это я еще не генерировал исключение в Init.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777089</guid>
        <pubDate>Thu, 30 Aug 2018 08:18:19 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777089</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777087'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T08:09:43+00:00">30.08.18, 08:09</time></span><div class='quote '>Тогда я объявлю массив и передам массив.</div></div><br>
Блин  :lool: Ну так твой MyType и есть мой Global &#33;&#33;&#33;<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777087'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T08:09:43+00:00">30.08.18, 08:09</time></span><div class='quote '>Ну вот я захотел передать в твой холдер std::shared_ptr&lt;A&gt; че мне делать то? :huh:</div></div><br>
Не пробовал, не знаю. Заверни его в структуру или класс и передай. Надо пробовать.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777087'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T08:09:43+00:00">30.08.18, 08:09</time></span><div class='quote '>А зачем это нужно то? Я что сам не могу вызвать Init/Cleanup, если мне понадобиться?</div></div><br>
А можешь и забыть. А ненаследованный класс тебя заставит не забыть.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777087'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T08:09:43+00:00">30.08.18, 08:09</time></span><div class='quote '>А что если у меня Cleanup может генерировать исключение? Выходят я получу граблями в лоб из за твоего мега кода? </div></div>Подавляй. Считай - это полноценная часть деструктора. В деструкторе же ты не собираешься бросать исключения? Или собираешься?  :)]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777087</guid>
        <pubDate>Thu, 30 Aug 2018 08:09:43 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777087</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777084'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:59:38+00:00">30.08.18, 07:59</time></span><div class='quote '>По секрету: там будет 128 переменных&#33; :lol:</div></div><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">struct MyType</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; int variable1;</div><div class="code_line">&nbsp;&nbsp; shared_ptr&#60;int&#62; variable2;</div><div class="code_line">&nbsp;&nbsp; MyObject variable3;</div><div class="code_line">&nbsp;&nbsp; std::vector&#60;some type&#62; variable4;</div><div class="code_line">&nbsp;&nbsp; ololo variable5;</div><div class="code_line">&nbsp;&nbsp; int variable6;</div><div class="code_line">&nbsp;&nbsp; int variable7;</div><div class="code_line">...</div><div class="code_line">};</div><div class="code_line">..</div><div class="code_line">auto&amp; gVar = Singlenton&#60;MyType&#62;::Instance();</div><div class="code_line">&nbsp;</div><div class="code_line">gVar.Value().bla bla bla</div></ol></div></div></div></div><br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777084'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:59:38+00:00">30.08.18, 07:59</time></span><div class='quote '>Можно предусмотреть базовый класс с пустыми вызовами, а в наследниках про эти функции забыть. Элементарно, Ватсон&#33; :whistle:</div></div><br>
Ну вот я захотел передать в твой холдер std::shared_ptr&lt;A&gt; че мне делать то? :huh: <br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777084'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:59:38+00:00">30.08.18, 07:59</time></span><div class='quote '>Напоминаю&#33; В конструкторе нельзя вызывать виртуальные функции. В моем коде - это решается. </div></div><br>
А зачем это нужно то? Я что сам не могу вызвать Init/Cleanup, если мне понадобиться?<br>
А что если у меня Cleanup может генерировать исключение? Выходят я получу граблями в лоб из за твоего мега кода?]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777084</guid>
        <pubDate>Thu, 30 Aug 2018 07:59:38 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777084</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777082'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:52:09+00:00">30.08.18, 07:52</time></span><div class='quote '>В такой постановке задачи, я сделаю соответствующие конструкторы у классов Tx/Ty И передам нужные переменные из класса MyClass </div></div><br>
По секрету: там будет 128 переменных&#33; :lol: <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777082'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:52:09+00:00">30.08.18, 07:52</time></span><div class='quote '>А то, что тебе каждый раз придется делать обертки над типами, у которых нет этих методов - тебя не смущает? :huh:</div></div><br>
Можно предусмотреть базовый класс с пустыми вызовами, а в наследниках про эти функции забыть. Элементарно, Ватсон&#33; :whistle: <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777082'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:52:09+00:00">30.08.18, 07:52</time></span><div class='quote '>Конструктор/Деструктор вроде как раз их и заменяют, не? </div></div><br>
Напоминаю&#33; В конструкторе нельзя вызывать виртуальные функции. В моем коде - это решается.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777082</guid>
        <pubDate>Thu, 30 Aug 2018 07:52:09 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777082</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777080'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:45:46+00:00">30.08.18, 07:45</time></span><div class='quote '>Тут ничего страшного. В принципе можно еще шаблонами поиграться, чтобы на этапе компиляции вырезать вызовы. Лениво. Я уповаю на оптимизатор - их и так там не будет.</div></div><br>
А то, что тебе каждый раз придется делать обертки над типами, у которых нет этих методов - тебя не смущает?  :huh: <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777080'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:45:46+00:00">30.08.18, 07:45</time></span><div class='quote '>Просто сделай как просит топикстартер :)</div></div><br>
Он просит чтоб было вот так, как я понял?<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3776867'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>mishapk &#064; <time class="tag-quote__quoted-time" datetime="2018-08-27T08:39:34+00:00">27.08.18, 08:39</time></span><div class='quote '>Пример.<br>
До:<br>
int a,b,c,d; - глобальные переменные<br>
class Tx; - использует глобальные переменные<br>
class Ty; - использует глобальные переменные<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">&nbsp;&nbsp; &nbsp;Myclass</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; private:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; int a,b,c,d;</div><div class="code_line">&nbsp;&nbsp; &nbsp; public:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Tx x;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Ty y;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div></ol></div></div></div></div><br>
Какие будут идеи? </div></div><br>
В такой постановке задачи, я сделаю соответствующие конструкторы у классов Tx/Ty И передам нужные переменные из класса MyClass <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2018-08-30T07:54:41+00:00">30.08.18, 07:54</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777080'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:45:46+00:00">30.08.18, 07:45</time></span><div class='quote '><br>
Это не гибко. Я уже писал выше о невозможности сделать штатными средствами виртуальное конструирование. </div></div><br>
Че это не гибко?  :D  А вызывать Init и Cleanup гибко? Конструктор/Деструктор вроде как раз их и заменяют, не? :unsure:]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777080</guid>
        <pubDate>Thu, 30 Aug 2018 07:45:46 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777080</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777074'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:35:42+00:00">30.08.18, 07:35</time></span><div class='quote '>Попробуй передать в свой Holder класс у которого нет Init и Cleanup, и ты поймешь о чем я.</div></div><br>
Тут ничего страшного. В принципе можно еще шаблонами поиграться, чтобы на этапе компиляции вырезать вызовы. Лениво. Я уповаю на оптимизатор - их и так там не будет.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777079'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:42:35+00:00">30.08.18, 07:42</time></span><div class='quote '>Если ты еще не понял, то эти классы A и B и есть переменные, которые должны храниться вне этих классов. Попробуй выкинуть классы A и B. Если тебе нужны примитивные типы, создай структуру с нужным количеством типов и передай в синглтон. Все. </div></div><br>
Просто сделай как просит топикстартер :) <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2018-08-30T07:51:01+00:00">30.08.18, 07:51</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777077'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:39:01+00:00">30.08.18, 07:39</time></span><div class='quote '>Cоздатель, ВНЕЗАПНО, вызывается в момент конструирования указателя.</div></div><br>
Это не гибко. Я уже писал выше о невозможности сделать штатными средствами виртуальное конструирование.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777079</guid>
        <pubDate>Thu, 30 Aug 2018 07:42:35 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777079</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777078'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:39:54+00:00">30.08.18, 07:39</time></span><div class='quote '>Проблема в том, что эти переменные &quot;а&quot; и &quot;b&quot; должны хранится вне классов A и B. </div></div><br>
Если ты еще не понял, то эти классы A и B и есть переменные, которые должны храниться вне этих классов. Попробуй выкинуть классы A и B. Если тебе нужны примитивные типы, создай структуру с нужным количеством членов и передай в синглтон. Все.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777078</guid>
        <pubDate>Thu, 30 Aug 2018 07:39:54 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777078</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777074'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:35:42+00:00">30.08.18, 07:35</time></span><div class='quote '>И в чем проблема?</div></div><br>
Проблема в том, что эти переменные &quot;а&quot; и &quot;b&quot; должны хранится вне классов A и B. <br>
Ну прочти самое первое сообщение топикстартера :)]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777077</guid>
        <pubDate>Thu, 30 Aug 2018 07:39:01 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777077</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777073'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:18:28+00:00">30.08.18, 07:18</time></span><div class='quote '>Умным указателям, как я понял, можно передать ТОЛЬКО &quot;удалитель&quot;. </div></div><br>
Cоздатель, ВНЕЗАПНО, вызывается в момент конструирования указателя. Что целиком и полностью удовлетворяет идиоме RAII.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777073'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:18:28+00:00">30.08.18, 07:18</time></span><div class='quote '>Киля, чтобы было понятно - напомню откуда &quot;ноги растут&quot; в моем коде. В С++ в конструкторе нельзя вызывать виртуальные функции. Таким образом только деструктор может быть виртуальным. Мой код обеспечивает функционал &quot;виртуального конструктора&quot;. Как-то так. </div></div><br>
Твой код накладывает ограничение на использование объектов разных типов. Что если мне нужно передать в твой Holder shared_ptr объект?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777073'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:18:28+00:00">30.08.18, 07:18</time></span><div class='quote '>Если честно, я еще ни одной программы не скомпилировал в студии. Потому, что ее у меня нет. Хватает GCC и clang.<br>
Кстати, вот что пишет clang для ПРИВАТНОЙ секции:</div></div><br>
Речь идет не о конкретно студии. Речь идет о хорошем стиле программирования. Писать удаленные методы в приватной секции не по феншую. Понимаешь? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2018-08-30T07:39:40+00:00">30.08.18, 07:39</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777076'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:37:23+00:00">30.08.18, 07:37</time></span><div class='quote '>Так это же специально и сделано было для этого&#33; :lol:</div></div><br>
Зачем? Что бы постоянно городить обертки с пустыми Init и Cleanup?  :jokingly:]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777076</guid>
        <pubDate>Thu, 30 Aug 2018 07:37:23 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777076</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777074'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:35:42+00:00">30.08.18, 07:35</time></span><div class='quote '>Попробуй передать в свой Holder класс у которого нет Init и Cleanup, и ты поймешь о чем я.</div></div><br>
Так это же специально и сделано было для этого&#33;  :lol:]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777074</guid>
        <pubDate>Thu, 30 Aug 2018 07:35:42 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777074</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777073'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:18:28+00:00">30.08.18, 07:18</time></span><div class='quote '>Ну не тупи :lol:</div></div><br>
Попробуй передать в свой Holder класс у которого нет Init и Cleanup, и ты поймешь о чем я.<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777072'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:13:24+00:00">30.08.18, 07:13</time></span><div class='quote '>Топикстартеру нужно все глобальные переменные инкапсулировать в один класс, и потом дать к ним доступ из других классов. </div></div><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">template&#60;typename T&#62;</div><div class="code_line">struct Singleton</div><div class="code_line">{</div><div class="code_line">private:</div><div class="code_line">&nbsp;&nbsp; Singleton() = default;</div><div class="code_line">&nbsp;&nbsp; ~Singleton() = default;</div><div class="code_line">&nbsp;</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp; Singleton(const Singleton&amp;) = delete;</div><div class="code_line">&nbsp;&nbsp; Singleton&amp; operator= (const Singleton&amp;) = delete;</div><div class="code_line">&nbsp;&nbsp; Singleton(Singleton&amp;&amp;) = delete;</div><div class="code_line">&nbsp;&nbsp; Singleton&amp; operator= (Singleton&amp;&amp;) = delete;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; static Singleton&amp; Instance()</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;static Singleton&#60;T&#62; instance;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return instance;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; T Value() const</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return Singleton&#60;T&#62;::Instance().m_value;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; T&amp; Value()</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return Singleton&#60;T&#62;::Instance().m_value;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">private:</div><div class="code_line">&nbsp;&nbsp; T m_value;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class A</div><div class="code_line">{</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp; void print()</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;A: &quot; &#60;&#60; a &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; int a;</div><div class="code_line">&nbsp;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class B</div><div class="code_line">{</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp; void print()</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;B: &quot; &#60;&#60; b &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;&nbsp; int b;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class C</div><div class="code_line">{</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp; void DoSomething()</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Singleton&#60;A&#62;&amp; instA = Singleton&#60;A&#62;::Instance();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Singleton&#60;B&#62;&amp; instB = Singleton&#60;B&#62;::Instance();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;instA.Value().print();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;instB.Value().print();</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">int main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; Singleton&#60;A&#62;&amp; instA = Singleton&#60;A&#62;::Instance();</div><div class="code_line">&nbsp;&nbsp; Singleton&#60;B&#62;&amp; instB = Singleton&#60;B&#62;::Instance();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; instA.Value().a = 10;</div><div class="code_line">&nbsp;&nbsp; instB.Value().b = 20;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; instA.Value().print();</div><div class="code_line">&nbsp;&nbsp; instB.Value().print();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; std::cout &#60;&#60; &quot;-------C---------&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; C c;</div><div class="code_line">&nbsp;&nbsp; c.DoSomething();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; std::cin.get();</div><div class="code_line">&nbsp;&nbsp; return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
Это же синглентон, где хочешь там и вызывай его. У тебя гарантированно будет 1 экземпляр класса.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777073</guid>
        <pubDate>Thu, 30 Aug 2018 07:18:28 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777073</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777071'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:03:51+00:00">30.08.18, 07:03</time></span><div class='quote '>Ничего он там не обеспечивает.</div></div><br>
Ну не тупи  :lol: <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">Holder() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;Holder()::Holder()&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (!Self) &nbsp;Self = new T();</div><div class="code_line">&nbsp;&nbsp; &nbsp;Self-&#62;Init(); // &#60;----------------------------------------- инициализация ПОСЛЕ создания а не ВО ВРЕМЯ</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;~Holder() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (Self) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Self-&#62;Cleanup(); // &#60; ----------------------------------- очистка ДО начала процесса разрушения</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;delete Self;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;~Holder()::Holder()&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp;}</div></ol></div></div></div></div><br>
<br>
Умным указателям, как я понял, можно передать ТОЛЬКО &quot;удалитель&quot;. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2018-08-30T07:24:20+00:00">30.08.18, 07:24</time></span></span><br>
Киля, чтобы было понятно - напомню откуда &quot;ноги растут&quot; в моем коде. В С++ в конструкторе нельзя вызывать виртуальные функции. Таким образом только деструктор может быть виртуальным. Мой код обеспечивает функционал &quot;виртуального конструктора&quot;. Как-то так. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2018-08-30T07:30:13+00:00">30.08.18, 07:30</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777071'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:03:51+00:00">30.08.18, 07:03</time></span><div class='quote '>Ну ты на всех компиляторах проверил? А то например в 2017 студии пишет:</div></div><br>
Если честно, я еще ни одной программы не скомпилировал в студии. Потому, что ее у меня нет. Хватает GCC и clang.<br>
Кстати, вот что пишет clang для ПРИВАТНОЙ секции:<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">prog.cc:10:5: error: call to deleted constructor of &#39;A&#39;</div><div class="code_line">&nbsp;&nbsp;A a;</div><div class="code_line">&nbsp;&nbsp; &nbsp;^</div><div class="code_line">prog.cc:6:5: note: &#39;A&#39; has been explicitly marked deleted here</div><div class="code_line">&nbsp;&nbsp; &nbsp;A() = delete;</div><div class="code_line">&nbsp;&nbsp; &nbsp;^</div><div class="code_line">1 error generated.</div></ol></div></div></div></div><br>
Выкинь студию&#33;  :lol:]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777072</guid>
        <pubDate>Thu, 30 Aug 2018 07:13:24 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777072</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777071'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T07:03:51+00:00">30.08.18, 07:03</time></span><div class='quote '>Это если конкретно через синглтон. </div></div><br>
Вариант рабочий, но ИМХО, по ТЗ - не то. Топикстартеру нужно все глобальные переменные инкапсулировать в один класс, и потом дать к ним доступ из других классов. <br>
<br>
По твоему примеру это - в классах A и В должен быть доступ к таким переменным. А там пока только печать константной строки.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777071</guid>
        <pubDate>Thu, 30 Aug 2018 07:03:51 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777071</link>
        <description><![CDATA[Wound: Ну вот так наверное как то:<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">template&#60;typename T&#62;</div><div class="code_line">struct Singleton</div><div class="code_line">{</div><div class="code_line">private:</div><div class="code_line">&nbsp;&nbsp; Singleton() = default;</div><div class="code_line">&nbsp;&nbsp; ~Singleton() = default;</div><div class="code_line">&nbsp;</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp; Singleton(const Singleton&amp;) = delete;</div><div class="code_line">&nbsp;&nbsp; Singleton&amp; operator= (const Singleton&amp;) = delete;</div><div class="code_line">&nbsp;&nbsp; Singleton(Singleton&amp;&amp;) = delete;</div><div class="code_line">&nbsp;&nbsp; Singleton&amp; operator= (Singleton&amp;&amp;) = delete;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; static Singleton&amp; Instance()</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;static Singleton&#60;T&#62; instance;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return instance;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; T Value() const</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return Singleton&#60;T&#62;::Instance().m_value;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; T&amp; Value()</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return Singleton&#60;T&#62;::Instance().m_value;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">private:</div><div class="code_line">&nbsp;&nbsp; T m_value;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class A</div><div class="code_line">{</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp; void print()</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;A&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class B</div><div class="code_line">{</div><div class="code_line">public:</div><div class="code_line">&nbsp;&nbsp; void print()</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;B&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">int main()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; Singleton&#60;A&#62;&amp; instA = Singleton&#60;A&#62;::Instance();</div><div class="code_line">&nbsp;&nbsp; Singleton&#60;B&#62;&amp; instB = Singleton&#60;B&#62;::Instance();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; instA.Value().print();</div><div class="code_line">&nbsp;&nbsp; instB.Value().print();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; std::cin.get();</div><div class="code_line">&nbsp;&nbsp; return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
Это если конкретно через синглтон. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2018-08-30T07:11:22+00:00">30.08.18, 07:11</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777070'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T06:48:13+00:00">30.08.18, 06:48</time></span><div class='quote '>Может ты и прав. Но пока я существенного не замечаю. Может потом... :whistle:</div></div><br>
Ну ты на всех компиляторах проверил? А то например в 2017 студии пишет:<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">1&#62;e:\develop\main.cpp(178): error C2248: &#39;C::C&#39;: cannot access private member declared in class &#39;C&#39;</div><div class="code_line">1&#62;e:\develop\main.cpp(172): note: see declaration of &#39;C::C&#39;</div><div class="code_line">1&#62;e:\develop\main.cpp(169): note: see declaration of &#39;C&#39;</div></ol></div></div></div></div><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 C</div><div class="code_line">{</div><div class="code_line">private:</div><div class="code_line">&nbsp;&nbsp; C() = delete;</div><div class="code_line">};</div></ol></div></div></div></div><br>
В других компиляторах может быть иначе. Но я не вижу вообще никакого здавого смысла делать приватными удаляемые члены. Профита вообще 0. А вот если привыкнуть делать их открытыми, то профита куда больше.<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777070'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T06:48:13+00:00">30.08.18, 06:48</time></span><div class='quote '>Класс Holder обеспечивает автоматическую инициализацию после создания экземпляра класса, и автоматическую очистку перед разрушением экземпляра класса. Это некое подобие функционала из Дэлфи :lol: (линк). </div></div><br>
Ничего он там не обеспечивает. Он накладывает ограничения на используемый класс. Вообще в С++ все эти действия делаеются в конструкторе/деструкторе. А для умных указателей shared_/unique/weak  можно передать функцию deleter, если тебе нужно как то по особому очистить ресурс.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777070</guid>
        <pubDate>Thu, 30 Aug 2018 06:48:13 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777070</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777066'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T06:38:25+00:00">30.08.18, 06:38</time></span><div class='quote '>В смысле поэкспериментировать? Дело в том, что когда ты пишешь = delete, то компилятор выбрасывает этот член класса. И если вдруг ты его юзнул - тебе он так и скажет, такоой метод помечен как удаленный, так что вызывай другой.<br>
А когда ты его делаешь закрытым, то вполне можешь выхватить ошибку аля: не могу вызвать такой метод, он находится в секции private.<br>
Когда речь идет о небольшой логике - никаких проблем не будет. Но вдруг если будет что то понавороченее, например с какими нибудь итераторами внутри second/first или еще чего, которые нужно будет куда нибудь перенести или скопировать, то можешь потратить много времени, на выявление ошибок.</div></div><br>
<br>
Проверил сообщения.<br>
<br>
Для <strong class='tag-b'>public</strong> секции:<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">prog.cpp: In function ‘int main()’:</div><div class="code_line">prog.cpp:10:5: error: use of deleted function ‘A::A()’</div><div class="code_line">&nbsp;&nbsp; A a;</div><div class="code_line">&nbsp;&nbsp; &nbsp; ^</div><div class="code_line">prog.cpp:6:5: note: declared here</div><div class="code_line">&nbsp;&nbsp; &nbsp; A() = delete;</div><div class="code_line">&nbsp;&nbsp; &nbsp; ^</div></ol></div></div></div></div><br>
<br>
Для <strong class='tag-b'>private</strong> секции:<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">prog.cpp: In function ‘int main()’:</div><div class="code_line">prog.cpp:10:5: error: ‘A::A()’ is private within this context</div><div class="code_line">&nbsp;&nbsp; A a;</div><div class="code_line">&nbsp;&nbsp; &nbsp; ^</div><div class="code_line">prog.cpp:6:5: note: declared private here</div><div class="code_line">&nbsp;&nbsp; &nbsp; A() = delete;</div><div class="code_line">&nbsp;&nbsp; &nbsp; ^</div></ol></div></div></div></div><br>
<br>
Может ты и прав. Но пока я существенного не замечаю. Может потом... :whistle: <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2018-08-30T06:55:47+00:00">30.08.18, 06:55</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777064'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T06:26:46+00:00">30.08.18, 06:26</time></span><div class='quote '>А вместо класса Holder думаю имеет смысл использовать shared_ptr,</div></div><br>
Класс Holder обеспечивает автоматическую инициализацию после создания экземпляра класса, и автоматическую очистку перед разрушением экземпляра класса. Это некое подобие функционала из Дэлфи  :lol: (<a class='tag-url' href='http://docwiki.embarcadero.com/RADStudio/Tokyo/en/AfterConstruction_and_BeforeDestruction' target='_blank'>линк</a>).]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777068</guid>
        <pubDate>Thu, 30 Aug 2018 06:46:50 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777068</link>
        <description><![CDATA[Dushevny: А вот интересно, как этот механизм инициализации статических переменных реализуется внутри. Где-то видел в листинге такой вариант - компилятор создает скрытую &quot;совсем-совсем статическую&quot; переменную, которая обнуляется вместе с .bss, после чего при каждом входе в функцию проверяет ее на равенство нулю и, если она ноль, инициализирует явную статическую переменную. <br>Мое чувство прекрасного сильно страдает от того, что явная переменная фактически дублирует неявную и что все эти действия реально нужны только один раз при запуске программы, но продолжают выполняться и отжирать процессорное время и электричество в течении всего времени выполнения программы.]]></description>
        <author>Dushevny</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777067</guid>
        <pubDate>Thu, 30 Aug 2018 06:39:03 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777067</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777064'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T06:26:46+00:00">30.08.18, 06:26</time></span><div class='quote '>А этот класс я бы вообще выкинул, в нем нет никакого смысла.</div></div><br>
Это класс из которого &quot;фабрика синглтонов&quot; class Singlеton, собственно, и делает синглтон :) В этом классе и хранятся заветные &quot;глобальные&quot; переменные. Низя это выкидывать.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777066</guid>
        <pubDate>Thu, 30 Aug 2018 06:38:25 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777066</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777065'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T06:34:26+00:00">30.08.18, 06:34</time></span><div class='quote '>Возможно. Но лучше поэксперементировать и посмотреть мой вариант и твой.</div></div><br>
В смысле поэкспериментировать? Дело в том, что когда ты пишешь = delete, то компилятор выбрасывает этот член класса. И если вдруг ты его юзнул - тебе он так и скажет, такоой метод помечен как удаленный, так что вызывай другой.<br>
А когда ты его делаешь закрытым, то вполне можешь выхватить ошибку аля: не могу вызвать такой метод, он находится в секции private.<br>
Когда речь идет о небольшой логике - никаких проблем не будет. Но вдруг если будет что то понавороченее, например с какими нибудь итераторами внутри second/first или еще чего, которые нужно будет куда нибудь перенести или скопировать, то можешь потратить много времени, на выявление ошибок.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777065'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T06:34:26+00:00">30.08.18, 06:34</time></span><div class='quote '>Давай твой вариант для коллекции :)</div></div><br>
Тебе какой именно? С Синглтоном? ну хорошо, щас что нибудь напишу.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777065</guid>
        <pubDate>Thu, 30 Aug 2018 06:34:26 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777065</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777064'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T06:26:46+00:00">30.08.18, 06:26</time></span><div class='quote '>Их нужно в секцию public перенести. Не по феншую, когда удаленные мемберы в закрытой секции. В противном случае ты можешь получить невнятную ошибку компиляции, и сидеть гадать почему так.</div></div><br>
Возможно. Но лучше поэксперементировать и посмотреть мой вариант и твой.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777064'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2018-08-30T06:26:46+00:00">30.08.18, 06:26</time></span><div class='quote '>А вместо класса Holder думаю имеет смысл использовать shared_ptr, или лучше вообще уйти от указателей и возвращать ссылку на статический член класса(Синглтон Майерса.).<br>
А то у тебя код для двух статический переменных неоправданно навороченный. </div></div><br>
Давай твой вариант для коллекции :)]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777064</guid>
        <pubDate>Thu, 30 Aug 2018 06:26:46 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777064</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3776885'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-27T11:38:08+00:00">27.08.18, 11:38</time></span><div class='quote '><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">private:</div><div class="code_line">&nbsp;&nbsp; &nbsp;Singleton() = delete;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Singleton(Singleton const&amp;) = delete;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Singleton&amp; operator= (Singleton const&amp;) = delete;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Singleton(Singleton const&amp;&amp;) = delete;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Singleton&amp; operator= (Singleton const&amp;&amp;) = delete;</div></ol></div></div></div></div></div></div><br>
Их нужно в секцию public перенести. Не по феншую, когда удаленные мемберы в закрытой секции. В противном случае ты можешь получить невнятную ошибку компиляции, и сидеть гадать почему так.<br>
<br>
А вместо класса Holder думаю имеет смысл использовать shared_ptr, или лучше вообще уйти от указателей и возвращать ссылку на статический член класса(Синглтон Майерса.).<br>
А то у тебя код для двух статический переменных неоправданно навороченный. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2018-08-30T06:28:48+00:00">30.08.18, 06:28</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3776885'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-27T11:38:08+00:00">27.08.18, 11:38</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">class Global {</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;int GetA() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cout &#60;&#60; &quot;GetA&quot; &#60;&#60; endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return x-1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;int GetB() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cout &#60;&#60; &quot;GetB&quot; &#60;&#60; endl; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return x+1;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;void Init() {};</div><div class="code_line">&nbsp;&nbsp; &nbsp;void Cleanup() {};</div><div class="code_line">&nbsp;&nbsp;private:</div><div class="code_line">&nbsp;&nbsp; &nbsp;int x = 1;</div><div class="code_line">};</div></ol></div></div></div></div></div></div><br>
А этот класс я бы вообще выкинул, в нем нет никакого смысла.]]></description>
        <author>Wound</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777058</guid>
        <pubDate>Wed, 29 Aug 2018 23:01:41 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777058</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3777057'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2018-08-29T22:14:33+00:00">29.08.18, 22:14</time></span><div class='quote '>Зачем мне дополнительные сущности для достижения той-же цели ?<br>
Достаточно описать переменную как &quot;static&quot;. </div></div><br>
В моей реализации переменные получат гарантированно-правильную инициализацию (и освобождение) ресурсов до использования - методы Init и Cleanup. В твоем случае нужно заботиться в предметном коде о недопущении использования до инициализации этих самых бывших &quot;глобальных&quot; переменных нужными значениями, а не полученными по-умолчанию. ИМХО, это аргумент.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777057</guid>
        <pubDate>Wed, 29 Aug 2018 22:14:33 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3777057</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3776885'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-27T11:38:08+00:00">27.08.18, 11:38</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3776882'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2018-08-27T11:05:49+00:00">27.08.18, 11:05</time></span><div class='quote '>Экземпляров класса может быть любое количество, в этом<br>
и удобство. </div></div><br>
<a class='tag-url' href='https://ideone.com/F3urOR' target='_blank'>А так неудобно?</a> См Test1Class и Test2Class:</div></div><br>
Лично мне - нет.<br>
Зачем мне дополнительные сущности для достижения той-же цели ?<br>
Достаточно описать переменную как &quot;static&quot;.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3776885</guid>
        <pubDate>Mon, 27 Aug 2018 11:38:08 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3776885</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3776882'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2018-08-27T11:05:49+00:00">27.08.18, 11:05</time></span><div class='quote '>Экземпляров класса может быть любое количество, в этом<br>
и удобство. </div></div><br>
<a class='tag-url' href='https://ideone.com/F3urOR' target='_blank'>А так неудобно?</a> См Test1Class и Test2Class:<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">#include &#60;iostream&#62;</div><div class="code_line">using namespace std;</div><div class="code_line">&nbsp;</div><div class="code_line">////////////////////////////////////////////////////////////////////////////////////////</div><div class="code_line">&nbsp;</div><div class="code_line">template&#60;typename T&#62;</div><div class="code_line">struct Holder {</div><div class="code_line">&nbsp;&nbsp;Holder() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;Holder()::Holder()&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (!Self) &nbsp;Self = new T();</div><div class="code_line">&nbsp;&nbsp; &nbsp;Self-&#62;Init();</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;~Holder() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (Self) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Self-&#62;Cleanup();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;delete Self;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;~Holder()::Holder()&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;T* Self = nullptr;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">////////////////////////////////////////////////////////////////////////////////////////</div><div class="code_line">&nbsp;</div><div class="code_line">template &#60;typename T&#62;</div><div class="code_line">class Singleton {</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;static T* Instance() {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;std::cout &#60;&#60; &quot;Singlton::Instance()&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;static Holder&#60;T&#62; Dummy;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return Dummy.Self;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp;private:</div><div class="code_line">&nbsp;&nbsp; &nbsp;Singleton() = delete;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Singleton(Singleton const&amp;) = delete;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Singleton&amp; operator= (Singleton const&amp;) = delete;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Singleton(Singleton const&amp;&amp;) = delete;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Singleton&amp; operator= (Singleton const&amp;&amp;) = delete;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class Global {</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;int GetA() { </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cout &#60;&#60; &quot;GetA&quot; &#60;&#60; endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return x-1; </div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;int GetB() { </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;cout &#60;&#60; &quot;GetB&quot; &#60;&#60; endl; &nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return x+1; </div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;void Init() {};</div><div class="code_line">&nbsp;&nbsp; &nbsp;void Cleanup() {};</div><div class="code_line">&nbsp;&nbsp;private:</div><div class="code_line">&nbsp;&nbsp; &nbsp;int x = 1;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">struct Test1Class {</div><div class="code_line">&nbsp;&nbsp;void Print() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;cout &#60;&#60; Singleton&#60;Global&#62;::Instance()-&#62;GetA() &#60;&#60; endl; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp;} </div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">struct Test2Class {</div><div class="code_line">&nbsp;&nbsp;void Print() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;cout &#60;&#60; Singleton&#60;Global&#62;::Instance()-&#62;GetB() &#60;&#60; endl; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp;} </div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp;Test1Class T1;</div><div class="code_line">&nbsp;&nbsp;Test2Class T2;</div><div class="code_line">&nbsp;&nbsp;T1.Print();</div><div class="code_line">&nbsp;&nbsp;T2.Print();</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3776882</guid>
        <pubDate>Mon, 27 Aug 2018 11:05:49 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3776882</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3776879'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2018-08-27T09:41:32+00:00">27.08.18, 09:41</time></span><div class='quote '>Ну да, в том числе и для этого придумали синглтоны.</div></div><br>
Нет, этого не нужно в данном случае.<br>
Экземпляров класса может быть любое количество, в этом<br>
и удобство. <br>
Экземпляр такого класса - это как-бы окошко многоквартирного<br>
дома. Каждое из которого выходит на один и тот же двор, и из каждого<br>
можно наблюдать одну и ту же картину. <br>
И есть возможность кинуть бутылку в одно и то же место.<br>
А из той квартиры, где этого окошка нет - дворика не видно.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3776879</guid>
        <pubDate>Mon, 27 Aug 2018 09:41:32 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3776879</link>
        <description><![CDATA[JoeUser: Ну да, в том числе и для этого придумали синглтоны.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3776877</guid>
        <pubDate>Mon, 27 Aug 2018 09:37:01 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3776877</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3776867'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>mishapk &#064; <time class="tag-quote__quoted-time" datetime="2018-08-27T08:39:34+00:00">27.08.18, 08:39</time></span><div class='quote '>Есть два класса работающие вместе общими глобальными переменными.</div></div><br>
Надо глобальные переменные обернуть классом.<br>
Сделать их &quot;public&quot; и &quot;static&quot;.<br>
Таким образом, любой экземпляр такого класса станет <br>
объектом доступа к &quot;глобальным&quot; переменным.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3776876</guid>
        <pubDate>Mon, 27 Aug 2018 09:32:00 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3776876</link>
        <description><![CDATA[JoeUser: Некрасивый вариант:<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">#include &#60;iostream&#62;</div><div class="code_line">using namespace std;</div><div class="code_line">&nbsp;</div><div class="code_line">class Tx;</div><div class="code_line">class Ty;</div><div class="code_line">&nbsp;</div><div class="code_line">class Config {</div><div class="code_line">&nbsp;&nbsp;private: &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int a = 2, b = 3;</div><div class="code_line">&nbsp;&nbsp; &nbsp;friend Tx; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;friend Ty;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class Tx {</div><div class="code_line">&nbsp;&nbsp;public: &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;int GetA(Config &amp;r) { return r.a; }</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class Ty {</div><div class="code_line">&nbsp;&nbsp;public: &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;int GetB(Config &amp;r) { return r.b*2; }</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">class Result {</div><div class="code_line">&nbsp;&nbsp;public:</div><div class="code_line">&nbsp;&nbsp; &nbsp;Config c;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Tx x;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Ty y;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp;Result R;</div><div class="code_line">&nbsp;&nbsp;cout &#60;&#60; R.x.GetA(R.c) &#60;&#60; endl;</div><div class="code_line">&nbsp;&nbsp;cout &#60;&#60; R.y.GetB(R.c) &#60;&#60; endl;</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>JoeUser</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3776870</guid>
        <pubDate>Mon, 27 Aug 2018 09:14:13 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3776870</link>
        <description><![CDATA[mishapk: Не видят так как подклассы реализуются за пределами класса и они их просто не видят.<br>Сделал подклассы вложенными, тоже не видят. В Java это вроде возможно а в С++  нет.<br>Остается только через указатели в конструкторе подклассов передавать в виде структуры. Я так думаю.]]></description>
        <author>mishapk</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3776869</guid>
        <pubDate>Mon, 27 Aug 2018 09:05:45 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3776869</link>
        <description><![CDATA[Олег М: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=413448&view=findpost&p=3776867'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>mishapk &#064; <time class="tag-quote__quoted-time" datetime="2018-08-27T08:39:34+00:00">27.08.18, 08:39</time></span><div class='quote '>Какие будут идеи?</div></div><br>
Не видят, потому что они у тебя private. Сделай protected.<br>
И, эти глобальные переменные разве не должны быть static?]]></description>
        <author>Олег М</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3776867</guid>
        <pubDate>Mon, 27 Aug 2018 08:39:34 +0000</pubDate>
        <title>Инкапсуляция глобальных переменных</title>
        <link>https://forum.sources.ru/index.php?showtopic=413448&amp;view=findpost&amp;p=3776867</link>
        <description><![CDATA[mishapk: Добрый день<br>
Есть два класса работающие вместе общими глобальными переменными.<br>
Хочу объединить все вместе в отдельный класс в том числе и переменные. Возникла проблема подклассы не видят у себя внутри этих переменные.<br>
<br>
Пример.<br>
До:<br>
int a,b,c,d; - глобальные переменные<br>
class Tx; - использует глобальные переменные<br>
class Ty; - использует глобальные переменные <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">My class</div><div class="code_line">{ </div><div class="code_line">&nbsp;private:</div><div class="code_line">&nbsp;&nbsp; int a,b,c,d;</div><div class="code_line">&nbsp;public:</div><div class="code_line">&nbsp;&nbsp;Tx x;</div><div class="code_line">&nbsp;&nbsp;Ty y; </div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Какие будут идеи?]]></description>
        <author>mishapk</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	