<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: check valid returned reference</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/9344.html</link>
    <description>Здравствуйте!&lt;br&gt;Предположим, у нас имеется функция:&lt;br&gt;&#091;code&#093;&lt;br&gt;char* f()&lt;br&gt;&#123;&lt;br&gt;     char *ch = new(nothrow) char&#091;1&#093;;&lt;br&gt;     return (ch)? ch : -1;&lt;br&gt;&#125;&lt;br&gt;&#091;/code&#093;&lt;br&gt;Таким образом, мы проверяем валидность возвращаемого указателя.&lt;br&gt;А теперь предположим, что наша функция возвращает не указатель а ссылку на объект(определенный пользователем, в самом худшем случае)&lt;br&gt;&lt;br&gt;&#091;code&#093;&lt;br&gt;class A;&lt;br&gt;&lt;br&gt;A&amp; f()&lt;br&gt;&#123;&lt;br&gt;     A a;&lt;br&gt;     return a;&lt;br&gt;&#125;&lt;br&gt;&#091;/code&#093;&lt;br&gt;Как в таком случае проверить валидность ссылки и вернуть либо саму ссылку, либо -1 ?&lt;br&gt;Спасибо&lt;br&gt;</description>

<item>
    <title>check valid returned reference (pavlinux)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/9344.html#6</link>
    <pubDate>Fri, 02 Mar 2012 18:50:02 GMT</pubDate>
    <description>&amp;gt; Здравствуйте!&lt;br&gt;&amp;gt; Предположим, у нас имеется функция: &lt;br&gt;&amp;gt; &#091;code&#093; &lt;br&gt;&amp;gt; char* f() &lt;br&gt;&amp;gt; &#123; &lt;br&gt;&amp;gt;      char *ch = new(nothrow) char&#091;1&#093;; &lt;br&gt;&amp;gt;      return (ch)? ch : -1; &lt;br&gt;&amp;gt; &#125; &lt;br&gt;&amp;gt; &#091;/code&#093; &lt;br&gt;&lt;br&gt;Зачем в С++ юзать чистый С??? Вам чё, стринги малы, напурква чар?&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>check valid returned reference (Alex_S)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/9344.html#5</link>
    <pubDate>Thu, 01 Mar 2012 23:30:32 GMT</pubDate>
    <description>&lt;br&gt;&amp;gt; facepalm. Возврат ссылки на локальный объект...&lt;br&gt;&lt;br&gt; да ладно вам.. может, автор фрагментацию памяти изучает  ;)&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>check valid returned reference (del)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/9344.html#4</link>
    <pubDate>Fri, 24 Feb 2012 10:11:37 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt; class A; &lt;br&gt;&amp;gt; A&amp; f() &lt;br&gt;&amp;gt; &#123; &lt;br&gt;&amp;gt;      A a; &lt;br&gt;&amp;gt;      return a; &lt;br&gt;&amp;gt; &#125; &lt;br&gt;&amp;gt; &#091;/code&#093; &lt;br&gt;&amp;gt; Как в таком случае проверить валидность ссылки и вернуть либо саму ссылку, &lt;br&gt;&amp;gt; либо -1 ?&lt;br&gt;&amp;gt; Спасибо &lt;br&gt;&lt;br&gt;facepalm. Возврат ссылки на локальный объект...&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>check valid returned reference (Alex)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/9344.html#3</link>
    <pubDate>Mon, 02 Jan 2012 08:15:16 GMT</pubDate>
    <description>&amp;gt; Вы все перепутали - указанные Вами варианты относятся к первому методу с &lt;br&gt;&amp;gt; использованием указателей.&lt;br&gt;&amp;gt; Фактически, ссылка и указатель - одно и то же, за исключением того, &lt;br&gt;&amp;gt; что указатель может быть невалидный или нулевой, а ссылка ВСЕГДА! ссылается &lt;br&gt;&amp;gt; на объект, ее нельзя объявить без инициализации, хотя затем объект, на &lt;br&gt;&amp;gt; который ссылается ммылка, может быть удален.&lt;br&gt;&amp;gt; Так вот вопрос: как проверить валидность ссылки?&lt;br&gt;&lt;br&gt;Думаю Вы не первый, кто столкнулся с данной проблемой. Я для себя сделал класс-обертку над указателем и методы get,set, reset, close, кот. обрабатывают адекватно указатель.&lt;br&gt;&lt;br&gt;class A&#123;&lt;br&gt;  char *i;&lt;br&gt;public:&lt;br&gt;  A()&#123;i=NULL;&#125;;&lt;br&gt;  char *get()&#123;if(i!=NULL) return i; else return NULL;&#125;&lt;br&gt;  char set(char &amp;str)&#123;&lt;br&gt;          if(str != NULL)&#123;if(i!=NULL) i = str; else&#123; delete&#091;&#093; i; i = str&#125;&#125;&lt;br&gt;  &#125;&lt;br&gt;  char close()&#123;delete&#091;&#093; i; i = NULL;&#125;&lt;br&gt;&#125;;&lt;br&gt;&lt;br&gt;но тут возникает другая проблема - методы данного класса работают с &quot;внешним&quot; блоком памяти, и если вызван close, а со старым указателем, что либо делают - то </description>
</item>

<item>
    <title>check valid returned reference (handler2006)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/9344.html#2</link>
    <pubDate>Sun, 01 Jan 2012 18:21:30 GMT</pubDate>
    <description>Вы все перепутали - указанные Вами варианты относятся к первому методу с использованием указателей.&lt;br&gt;Фактически, ссылка и указатель - одно и то же, за исключением того, что указатель может быть невалидный или нулевой, а ссылка ВСЕГДА! ссылается на объект, ее нельзя объявить без инициализации, хотя затем объект, на который ссылается ммылка, может быть удален. &lt;br&gt;Так вот вопрос: как проверить валидность ссылки?&lt;br&gt;</description>
</item>

<item>
    <title>check valid returned reference (Alex)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/9344.html#1</link>
    <pubDate>Sun, 01 Jan 2012 14:01:58 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt; class A; &lt;br&gt;&amp;gt; A&amp; f() &lt;br&gt;&amp;gt; &#123; &lt;br&gt;&amp;gt;      A a; &lt;br&gt;&amp;gt;      return a; &lt;br&gt;&amp;gt; &#125; &lt;br&gt;&amp;gt; &#091;/code&#093; &lt;br&gt;&amp;gt; Как в таком случае проверить валидность ссылки и вернуть либо саму ссылку, &lt;br&gt;&amp;gt; либо -1 ?&lt;br&gt;&amp;gt; Спасибо &lt;br&gt;&lt;br&gt;Во-первых не &quot;return a;&quot;, а &quot;return &amp;a;&quot;&lt;br&gt;&lt;br&gt;Во-вторых: Определить в пользовательском классе метод, кот. возвращает ссылку вида &quot;return this;&quot; если все ресурсы нормально инициализированы&lt;br&gt;</description>
</item>

</channel>
</rss>
