<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[ScopeGuard: kopie vermeiden]]></title><description><![CDATA[<p>hallo!</p>
<p>ich benutze oft den scopeguard von alexandrescu (<a href="http://www.ddj.com/cpp/184403758" rel="nofollow">http://www.ddj.com/cpp/184403758</a>). wer es nicht kennt: durch ein einfaches interface, kann man ressourcen freigeben lassen (oder transaktionen durchführen).</p>
<p>beispiel aus dem artikel:</p>
<blockquote>
<p>void* buffer = std::malloc(1024);<br />
ScopeGuard freeIt = MakeGuard(std::free, buffer);<br />
FILE* topSecret = std::fopen(&quot;cia.txt&quot;);<br />
ScopeGuard closeIt = MakeGuard(std::fclose, topSecret);</p>
</blockquote>
<p>der trick ist folgender:</p>
<pre><code class="language-cpp">// class ScopeGuardImplBase
    void Dismiss() const throw()
    {    dismissed_ = true;    }
protected:
    ScopeGuardImplBase() : dismissed_(false)
    {}
    ScopeGuardImplBase(const ScopeGuardImplBase&amp; other)
    : dismissed_(other.dismissed_)
    {    other.Dismiss();    }
</code></pre>
<p>wenn dismiss_ true ist, werden die ressourcen freigegeben. ansonsten nicht. damit das nur einmal passiert gibt es den aufruf von Dismiss() im copy ctor.</p>
<p>wenn ich nun aber nur ressourcen freigeben will (so wie mit boost::scoped_ptr z.b.) brauche ich den dismiss-mechanismus gar nicht.</p>
<p>aber wie kopiere ich dann meinen modifizierten scopeguard aus makeGuard heraus? ich muss ja verhindern, dass meine ressourcen zweimal freigegeben werden. den copy constructor kann ich nicht verbieten, weil ich sonst nicht mehr makeGuard aufrufen kann. dismiss_ einfach rausschmeißen geht auch nicht, weil dann das problem von oben entsteht.</p>
<p>kann man das irgendwie beheben?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/206261/scopeguard-kopie-vermeiden</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 11:02:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/206261.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 22 Feb 2008 17:59:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ScopeGuard: kopie vermeiden on Fri, 22 Feb 2008 17:59:25 GMT]]></title><description><![CDATA[<p>hallo!</p>
<p>ich benutze oft den scopeguard von alexandrescu (<a href="http://www.ddj.com/cpp/184403758" rel="nofollow">http://www.ddj.com/cpp/184403758</a>). wer es nicht kennt: durch ein einfaches interface, kann man ressourcen freigeben lassen (oder transaktionen durchführen).</p>
<p>beispiel aus dem artikel:</p>
<blockquote>
<p>void* buffer = std::malloc(1024);<br />
ScopeGuard freeIt = MakeGuard(std::free, buffer);<br />
FILE* topSecret = std::fopen(&quot;cia.txt&quot;);<br />
ScopeGuard closeIt = MakeGuard(std::fclose, topSecret);</p>
</blockquote>
<p>der trick ist folgender:</p>
<pre><code class="language-cpp">// class ScopeGuardImplBase
    void Dismiss() const throw()
    {    dismissed_ = true;    }
protected:
    ScopeGuardImplBase() : dismissed_(false)
    {}
    ScopeGuardImplBase(const ScopeGuardImplBase&amp; other)
    : dismissed_(other.dismissed_)
    {    other.Dismiss();    }
</code></pre>
<p>wenn dismiss_ true ist, werden die ressourcen freigegeben. ansonsten nicht. damit das nur einmal passiert gibt es den aufruf von Dismiss() im copy ctor.</p>
<p>wenn ich nun aber nur ressourcen freigeben will (so wie mit boost::scoped_ptr z.b.) brauche ich den dismiss-mechanismus gar nicht.</p>
<p>aber wie kopiere ich dann meinen modifizierten scopeguard aus makeGuard heraus? ich muss ja verhindern, dass meine ressourcen zweimal freigegeben werden. den copy constructor kann ich nicht verbieten, weil ich sonst nicht mehr makeGuard aufrufen kann. dismiss_ einfach rausschmeißen geht auch nicht, weil dann das problem von oben entsteht.</p>
<p>kann man das irgendwie beheben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1461137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1461137</guid><dc:creator><![CDATA[objektkopierer]]></dc:creator><pubDate>Fri, 22 Feb 2008 17:59:25 GMT</pubDate></item><item><title><![CDATA[Reply to ScopeGuard: kopie vermeiden on Fri, 22 Feb 2008 18:05:16 GMT]]></title><description><![CDATA[<p>was stoert dich an dismiss? (einfach private setzen wenn der user dismiss() nicht aufrufen soll)</p>
<p>scopeguard muss ja kopierbar sein und da es kopierbar muss es ownership verwalten und dafuer braucht es state.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1461141</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1461141</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 22 Feb 2008 18:05:16 GMT</pubDate></item><item><title><![CDATA[Reply to ScopeGuard: kopie vermeiden on Fri, 22 Feb 2008 18:31:28 GMT]]></title><description><![CDATA[<p>hallo, danke für die schnelle antwort.</p>
<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>was stoert dich an dismiss? (einfach private setzen wenn der user dismiss() nicht aufrufen soll)</p>
</blockquote>
<p>ich brauche es nicht. das objekt soll in jedem fall die ressourcen freigeben.</p>
<blockquote>
<p>scopeguard muss ja kopierbar sein und da es kopierbar muss es ownership verwalten und dafuer braucht es state.</p>
</blockquote>
<p>d.h. es gibt keine möglichkeit makeGuard so umzuschreiben, dass ich ohne kopie auskomme? (nur zur erinnerung: das objekt wird außer bei makeGuard nicht kopiert.)</p>
<pre><code class="language-cpp">{
  ScopeGuard g = makeGuard(&amp;foo, var);
} // g wird ansonsten nicht kopiert
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1461164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1461164</guid><dc:creator><![CDATA[objektkopierer]]></dc:creator><pubDate>Fri, 22 Feb 2008 18:31:28 GMT</pubDate></item><item><title><![CDATA[Reply to ScopeGuard: kopie vermeiden on Fri, 22 Feb 2008 18:41:55 GMT]]></title><description><![CDATA[<p>Ich sehe zwar kein Problem, aber wenn du vom CopyCtor wegkommen willst, dann erstelle eine private Klasse im ScopeGuard die nur makeGuard instanziieren darf und verwende diese als initialisierung eines ScopeGuard objektes. Dann kannst du den CopyCtor private machen.</p>
<p>alternativ geht auch ein movable ansatz ala Mojo...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1461174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1461174</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 22 Feb 2008 18:41:55 GMT</pubDate></item><item><title><![CDATA[Reply to ScopeGuard: kopie vermeiden on Fri, 22 Feb 2008 22:16:00 GMT]]></title><description><![CDATA[<p>mojo ist ein bisschen overkill für mein problem. deshalb verwende ich die variante mit der klasse, die scopeguard initialisiert. allerdings stellt sich da jetzt ein kleines hindernis:</p>
<pre><code class="language-cpp">namespace detail
{
	template&lt;class T&gt;
	struct foo
	{
		foo(T) {}
	};
} // detail

class base {};

template &lt;class T&gt;
class bar : public base
{
	typedef detail::foo&lt;T&gt; foo;

public:
	bar(foo) {}

private:
	bar(const bar&amp;);
	bar&amp; operator= (const bar&amp;);
};

template&lt;class T&gt;
detail::foo&lt;T&gt; fun(T t)
{
	return detail::foo&lt;T&gt;(t);
}

int main()
{
	const base&amp; b = fun(2);
}
</code></pre>
<p>mein compiler findet den konstruktor von bar nicht (g++ 4.1.2). wie kann ich das beheben?</p>
<blockquote>
<p>copy.cpp:36: error: invalid initialization of reference of type 'const base&amp;' from expression of type 'detail::foo&lt;int&gt;'</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1461262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1461262</guid><dc:creator><![CDATA[objektkopierer]]></dc:creator><pubDate>Fri, 22 Feb 2008 22:16:00 GMT</pubDate></item><item><title><![CDATA[Reply to ScopeGuard: kopie vermeiden on Fri, 22 Feb 2008 22:21:40 GMT]]></title><description><![CDATA[<p>Also so spontan würde ich da mal sagen, dass das ist, weil es private ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1461263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1461263</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 22 Feb 2008 22:21:40 GMT</pubDate></item><item><title><![CDATA[Reply to ScopeGuard: kopie vermeiden on Sat, 23 Feb 2008 14:51:38 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Also so spontan würde ich da mal sagen, dass das ist, weil es private ist...</p>
</blockquote>
<p>das typedef ist private, aber da es eben nur ein alias ist, spielt das keine rolle.</p>
<p>ich habe den code inzwischen vereinfacht (keine templates). der compiler erkennt immer noch nicht, dass es eine umwandlung von foo nach const base&amp; gibt, allerdings habe ich keine ahnung warum. bar steht doch im selben namespace und der compiler sollte den konstruktor finden und als mögliche konvertierung erkennen.</p>
<pre><code class="language-cpp">namespace detail
{
	struct foo
	{
		foo(int) {}

	};
} // detail

class base {};

class bar : public base
{
public:
	bar(detail::foo) {}

private:
	bar(const bar&amp;);
	bar&amp; operator= (const bar&amp;);
};

detail::foo fun(int t)
{
	return detail::foo(t);
}

int main()
{
	const base&amp; b = fun(2);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1461546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1461546</guid><dc:creator><![CDATA[objektkopierer]]></dc:creator><pubDate>Sat, 23 Feb 2008 14:51:38 GMT</pubDate></item><item><title><![CDATA[Reply to ScopeGuard: kopie vermeiden on Sat, 23 Feb 2008 15:22:56 GMT]]></title><description><![CDATA[<p>es gibt auch keine umwandlung von detail::foo nach base.</p>
<p>das ginge nur, wenn du fun ein bar zurückgeben lassen würdest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1461560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1461560</guid><dc:creator><![CDATA[ausgeloggt]]></dc:creator><pubDate>Sat, 23 Feb 2008 15:22:56 GMT</pubDate></item><item><title><![CDATA[Reply to ScopeGuard: kopie vermeiden on Sat, 23 Feb 2008 15:37:41 GMT]]></title><description><![CDATA[<p>ausgeloggt schrieb:</p>
<blockquote>
<p>es gibt auch keine umwandlung von detail::foo nach base.</p>
</blockquote>
<p>doch, gibt es (existiert):</p>
<p>detail::foo -&gt; bar -&gt; const base&amp;</p>
<p>als test kann man folgendes in die main-funktion schreiben:</p>
<pre><code class="language-cpp">const bar&amp; a = fun(2);
	const base&amp; b = a;
</code></pre>
<p>oder meinst du, es <em>gibt</em> keine umwandlung (findet keine statt), weil der compiler nicht nach einem entsprechenden konstruktor suchen muss?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1461567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1461567</guid><dc:creator><![CDATA[objektkopierer]]></dc:creator><pubDate>Sat, 23 Feb 2008 15:37:41 GMT</pubDate></item><item><title><![CDATA[Reply to ScopeGuard: kopie vermeiden on Sat, 23 Feb 2008 16:03:26 GMT]]></title><description><![CDATA[<p>es gibt keine Umwandlung von foo nach base. Es gibt nur eine Umwandlung von foo nach bar nach base.</p>
<p>Was willst du eigentlich machen? Du kannst anhand der Daten die dir makeGuard() liefert das notwendige Objekt erstellen. Du musst das Objekt nicht sofort erstellen...</p>
<p>oder: makeGuard kann zB das ScopeGuard objekt erstellen und du verwendest im Client Code nur einen ScopeGuard holder - wrappst also den echten ScopeGuard nur.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1461580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1461580</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sat, 23 Feb 2008 16:03:26 GMT</pubDate></item><item><title><![CDATA[Reply to ScopeGuard: kopie vermeiden on Sun, 24 Feb 2008 19:44:45 GMT]]></title><description><![CDATA[<blockquote>
<p>wenn ich nun aber nur ressourcen freigeben will (so wie mit boost::scoped_ptr z.b.) brauche ich den dismiss-mechanismus gar nicht.</p>
</blockquote>
<p>Wenn du nur Resourcen freigeben willst, dann bastel dir eigene RAII Klassen für diese Resourcen.</p>
<p>Die &quot;ScopeGuard&quot; Lösung ist zwar nicht SEHR aufwändig, aber sicher aufwändiger als die Verwendung einer fertigen, spezialisierten RAII Klasse. Ohne diese RAII Klassen tippst du die ScopeGuard Lösung immer wieder und wieder und wieder, und überlegst dir immer wieder und wieder ob man da nicht was besser machen könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1462133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462133</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 24 Feb 2008 19:44:45 GMT</pubDate></item><item><title><![CDATA[Reply to ScopeGuard: kopie vermeiden on Sun, 24 Feb 2008 20:04:18 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Die &quot;ScopeGuard&quot; Lösung ist zwar nicht SEHR aufwändig, aber sicher aufwändiger als die Verwendung einer fertigen, spezialisierten RAII Klasse. Ohne diese RAII Klassen tippst du die ScopeGuard Lösung immer wieder und wieder und wieder, und überlegst dir immer wieder und wieder ob man da nicht was besser machen könnte.</p>
</blockquote>
<p>Aeh... nicht wirklich.</p>
<p>Du tippst:</p>
<pre><code class="language-cpp">FILE* f=fopen();
ON_BLOCK_EXIT(fclose, f);
</code></pre>
<p>Das ist oft weitaus besser als die komplette api zu wrappen. Denn man braucht ScopeGuard genau dann wenn du es mit einer C API zu tun hast. Und die komplette API in schoenes C++ zu wrappen ist nicht trivial und kostet sehr viel zeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1462138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462138</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sun, 24 Feb 2008 20:04:18 GMT</pubDate></item><item><title><![CDATA[Reply to ScopeGuard: kopie vermeiden on Sun, 24 Feb 2008 20:50:01 GMT]]></title><description><![CDATA[<p>Äh, doch wirklich.<br />
Ich weiss schon was du meinst.<br />
Ich hab selbst öfters solche oder ähnliche Dinge gebraucht. Ich schlage auch nicht vor die komplette API zu wrappen, sondern einfach nur RAII Klassen zu basteln:</p>
<pre><code class="language-cpp">// Version 1 (flexibel, schnell zu schreiben, einfach)
class FileHandle : private boost::noncopyable
{
public:
    FileHandle() : m_file(0) {}
    explicit FileHandle(FILE* file) : m_file(file) {}

    ~FileHandle()
    {
        if (m_file)
            fclose(m_file);
    }

    FILE* m_file; // ja, public!
};

// Version 2 (&quot;schöner&quot;)
class FileHandle : private boost::noncopyable
{
public:
    FileHandle() : m_file(0) {}
    explicit FileHandle(FILE* file) : m_file(file) {}

    ~FileHandle()
    {
        if (IsValid())
            fclose(m_file);
    }

    FILE* Get() const;
    bool IsValid() const;

    void Reset(FILE* file = 0);
    FILE* Release();

private:
    FILE* m_file;
};
</code></pre>
<p>Dadurch reduziert sich das ganze in der Anwendung auf:</p>
<pre><code class="language-cpp">FileHandle f(fopen(...));
</code></pre>
<p>Was einfacher ist.<br />
Sobald man ein FILE* o.ä. als Member in einer Klasse braucht wird der Unterschied noch deutlicher:</p>
<pre><code class="language-cpp">// mit ScopeGuard
Foo::Foo(...)
{
    m_file = fopen(...);
    ScopeGuard fileGuard = makeGuard(&amp;fclose, m_file);
    // ... ein haufen anderes Zeug welches Exceptions werfen oder sonstwie schief gehen könnte ...
    fileGuard.Dismiss();
}

Foo::~Foo()
{
    fclose(m_file);
}

// mit spezialisierter RAII Klasse:
Bar::Bar(...)
{
    m_file.Reset(fopen(...));
    // ... ein haufen anderes Zeug welches Exceptions werfen oder sonstwie schief gehen könnte ...
}

Bar::~Bar()
{
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1462175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462175</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 24 Feb 2008 20:50:01 GMT</pubDate></item><item><title><![CDATA[Reply to ScopeGuard: kopie vermeiden on Sun, 24 Feb 2008 21:03:16 GMT]]></title><description><![CDATA[<p>Ich persoenlich mag keine halben Loesungen.</p>
<p>Es ist zeitweise durchaus praktisch solche minimalen wrapper zu schreiben - aber oft reicht ein scopeguard locker aus. ein scopeguard kann naemlich auch member sein - das bitte nicht vergessen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>manchmal finde ich es einfach besser keine klasse nur wegen RAII zu verwenden: beispielsweise wenn ich mir speicher ueber eine spezielle alloc Funktion hole, zB GlobalAlloc. Ich mag den rohen Speicher nicht wirklich kapseln und mir den Aufwand einer neuen Klasse antun. Genau fuer solche Sachen ist ScopeGuard einfach ideal.</p>
<p>fuer FILE* wuerde ich wohl eher einen vollwertigen wrapper basteln - aber das lustige an ScopeGuard ist ja, ich bekomme exakt deine Wrapper Klasse automatisch:</p>
<pre><code class="language-cpp">ScopeGuard m = makeGuard(fclose, fopen(&quot;foo&quot;,&quot;w&quot;));
if(m.get()!=NULL) {
}
</code></pre>
<p>klappt problemlos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1462185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462185</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sun, 24 Feb 2008 21:03:16 GMT</pubDate></item><item><title><![CDATA[Reply to ScopeGuard: kopie vermeiden on Sun, 24 Feb 2008 21:46:30 GMT]]></title><description><![CDATA[<p>Also was eine &quot;halbe lösung&quot; ist ist ja wohl sehr subjektiv <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Ich halte hier eher den ScopeGuard für die &quot;halbe lösung&quot;.</p>
<p>Und das &quot;m.get()&quot; kann IMO nicht funktionieren da ScopeGuard nix davon weiss dass ein FILE* drinsteckt. Wenn dann müsste man also schon das entsprechende Template direkt verwenden anstatt es in einem ScopeGuard zu verstecken...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1462211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462211</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 24 Feb 2008 21:46:30 GMT</pubDate></item><item><title><![CDATA[Reply to ScopeGuard: kopie vermeiden on Sun, 24 Feb 2008 21:58:18 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Also was eine &quot;halbe lösung&quot; ist ist ja wohl sehr subjektiv <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Ich halte hier eher den ScopeGuard für die &quot;halbe lösung&quot;.</p>
<p>Und das &quot;m.get()&quot; kann IMO nicht funktionieren da ScopeGuard nix davon weiss dass ein FILE* drinsteckt. Wenn dann müsste man also schon das entsprechende Template direkt verwenden anstatt es in einem ScopeGuard zu verstecken...</p>
</blockquote>
<p>stimmt natuerlich - dazu muss man etwas rumbasteln. <code>ScopeGuard&lt;FILE*&gt; guard = makeGuard(fclose, f);</code> oder man verwendet generell ein Makro zur Definition. Das ganze ist aber nur dann relevant wenn man es wirklich als Member einer klasse haben will - in den meisten Faellen reicht ein ON_BLOCK_EXIT() locker.</p>
<p>die ganze idee hinter scopeguards ist es ja den unnoetigen aufwand fuer jede resource eigene wrapper zu schreiben zu eliminieren. man spart sich aufwand - denn jeder programmierer sollte 2mal denken wenn er im prinzip den selben code X mal schreiben muss.</p>
<p>scopeguard bietet die selbe funktionalitaet wie deine minimalen wrapper klassen - kostet mich aber nur minimalen aufwand.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1462221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462221</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sun, 24 Feb 2008 21:58:18 GMT</pubDate></item><item><title><![CDATA[Reply to ScopeGuard: kopie vermeiden on Mon, 25 Feb 2008 07:20:03 GMT]]></title><description><![CDATA[<p>Der Grund ScopeGuard zu entwickeln war übrigens auch, daß viele Entwickler jegliche Vorsicht unter Zeitdruck fallen lassen. Da ist es für diejenigen einfacher schnell OB_BLOCK_EXIT reinzuhacken als ne RAII-Klasse zu schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1462290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1462290</guid><dc:creator><![CDATA[Tyrdal]]></dc:creator><pubDate>Mon, 25 Feb 2008 07:20:03 GMT</pubDate></item><item><title><![CDATA[Reply to ScopeGuard: kopie vermeiden on Tue, 26 Feb 2008 22:07:24 GMT]]></title><description><![CDATA[<p>Also ich habe ScopeGuard immer so verstanden dass man es hernimmt um Cleanup durchzuführen welcher in der Form nur selten gebraucht wird.<br />
Wenn ich eine potentielle &quot;Cleanup-Klasse&quot; bloss 1 oder 2x brauche ziehe ich auch eine Lösung ala ScopeGuard vor.<br />
Wenn ich das zig- oder hundertfach brauche mach ich mir lieber eine eigene Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463662</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 26 Feb 2008 22:07:24 GMT</pubDate></item></channel></rss>