<?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[Ressourcen-Manager und Operator overloading]]></title><description><![CDATA[<p>Ich bastle momentan an einem Spiel und möchte eine Klasse schreiben, deren Objekte aus einer Datei geladene Ressourcen (z.B. Sound, Grafik etc.) speichern. Beim Erstellen des Objekts sollte geprüft werden, ob die angefragte Ressource schon im RAM ist und dann gegebenenfalls einen pointer auf die bestehende Ressource zurückgeben, ansonsten sollte ein neues Objekt erstellt werden.</p>
<p>Ich habe mich gefragt, ob man so etwas möglicherweise mit einem überladenen new-operator machen könnte, falls ja, vielleicht kann mich jemand in die richtige Richtung dirigieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/266595/ressourcen-manager-und-operator-overloading</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 04:16:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/266595.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 11 May 2010 12:00:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ressourcen-Manager und Operator overloading on Tue, 11 May 2010 12:00:25 GMT]]></title><description><![CDATA[<p>Ich bastle momentan an einem Spiel und möchte eine Klasse schreiben, deren Objekte aus einer Datei geladene Ressourcen (z.B. Sound, Grafik etc.) speichern. Beim Erstellen des Objekts sollte geprüft werden, ob die angefragte Ressource schon im RAM ist und dann gegebenenfalls einen pointer auf die bestehende Ressource zurückgeben, ansonsten sollte ein neues Objekt erstellt werden.</p>
<p>Ich habe mich gefragt, ob man so etwas möglicherweise mit einem überladenen new-operator machen könnte, falls ja, vielleicht kann mich jemand in die richtige Richtung dirigieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895652</guid><dc:creator><![CDATA[Avantarius]]></dc:creator><pubDate>Tue, 11 May 2010 12:00:25 GMT</pubDate></item><item><title><![CDATA[Reply to Ressourcen-Manager und Operator overloading on Tue, 11 May 2010 12:06:27 GMT]]></title><description><![CDATA[<p>Vermutlich sind smart pointers und eine getObject-Funktion je Ressource-Typ mit einer map dahinter das Mittel der Wahl.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895657</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 11 May 2010 12:06:27 GMT</pubDate></item><item><title><![CDATA[Reply to Ressourcen-Manager und Operator overloading on Tue, 11 May 2010 12:08:57 GMT]]></title><description><![CDATA[<p>Das hört sich an als ob du sowas Proxies für deine Ressourcen haben möchtest. operator new brauchst du dazu aber nicht zu überladen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895661</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 11 May 2010 12:08:57 GMT</pubDate></item><item><title><![CDATA[Reply to Ressourcen-Manager und Operator overloading on Tue, 11 May 2010 12:34:34 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Vermutlich sind smart pointers und eine getObject-Funktion je Ressource-Typ mit einer map dahinter das Mittel der Wahl.</p>
</blockquote>
<p>An sowas hatte ich auch zuerst gedacht. Allerdings muss ich dann bei jeder Ressourcenanforderung zuerst mit getObject prüfen, obs schon geladen ist und falls nicht dann erst laden. Hatte halt gedacht es wäre eleganter wenn sich das Objekt darum selbst kümmern würde, in etwa so (Pseudocode):</p>
<pre><code class="language-cpp">class Resource {
	string pfad; // pfad zum file
	int ref_count; // anzahl der referenzen aufs objekt
	static list&lt;Resource *&gt; liste; // liste mit allen objekten

	operator new(string pfad) {
		Resource *tmp = suche element aus liste mit element.pfad == pfad;
		if (!tmp) {
			allociere speicher und rufe constructor auf;
			füge neues objekt zur liste hinzu;
		} else
		{
			tmp.ref_count++;
			return tmp;
		}
	}

	operator delete {
		ref_count--;
		if (ref_count == 0) {
			entferne objekt aud liste;
			rufe destructor auf;
			gib speicher für objekt frei;
		}
	}

	Resource(string pfad) {
		lade ressource aus pfad datei;
		ref_count = 1;
	}

	~Resource() {
		gib die geladenen daten frei;
	}

};

// irgendwo später
Resource *res = new Resource(pfad_zum_file);
</code></pre>
<p>Allerdings ist das warscheinlich nicht möglich...?! Bin leider nicht sehr bewandert mit dem Thema C++ Speicheranforderung/op overloading.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895686</guid><dc:creator><![CDATA[Avantarius]]></dc:creator><pubDate>Tue, 11 May 2010 12:34:34 GMT</pubDate></item><item><title><![CDATA[Reply to Ressourcen-Manager und Operator overloading on Tue, 11 May 2010 12:37:38 GMT]]></title><description><![CDATA[<p>Avantarius schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>Vermutlich sind smart pointers und eine getObject-Funktion je Ressource-Typ mit einer map dahinter das Mittel der Wahl.</p>
</blockquote>
<p>An sowas hatte ich auch zuerst gedacht. Allerdings muss ich dann bei jeder Ressourcenanforderung zuerst mit getObject prüfen, obs schon geladen ist und falls nicht dann erst laden.</p>
</blockquote>
<p>Oh. Ja, hast recht. map ist zwar sehr schnell, aber es dem Compiler zu geben ist natürlich schneller und sicherer auch noch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895691</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 11 May 2010 12:37:38 GMT</pubDate></item><item><title><![CDATA[Reply to Ressourcen-Manager und Operator overloading on Tue, 11 May 2010 12:37:45 GMT]]></title><description><![CDATA[<p>du hast die Funktionalität von operator new und delete offenbar nicht verstanden. Die sind einzig und allein dazu da um Speicher zu reservieren, nicht um dir deine selbstdefinierten Ressourcen zu beschaffen.<br />
Wenn die Klasse Resource einen op new überlädt, ist der dazu da um Speicher <em>für neue Resource-Objekte</em> zu beschaffen - nicht für die Ressourcen die von den jeweilgen Resource-Objekten verwaltet werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895692</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 11 May 2010 12:37:45 GMT</pubDate></item><item><title><![CDATA[Reply to Ressourcen-Manager und Operator overloading on Tue, 11 May 2010 12:48:20 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>du hast die Funktionalität von operator new und delete offenbar nicht verstanden. Die sind einzig und allein dazu da um Speicher zu reservieren, nicht um dir deine selbstdefinierten Ressourcen zu beschaffen.<br />
Wenn die Klasse Resource einen op new überlädt, ist der dazu da um Speicher <em>für neue Resource-Objekte</em> zu beschaffen - nicht für die Ressourcen die von den jeweilgen Resource-Objekten verwaltet werden.</p>
</blockquote>
<p>Wie gesagt, bin nicht recht bewandert in der ganzen Sache (bin erst vor kurzem &quot;zwangsläufig&quot; auf C++ umgestiegen) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> . Auf jeden Fall danke für die Info, war genau das was ich wissen wollte.<br />
Gibts vielleicht eine andre Möglichkeit, um das ähnlich elegant zu lösen wie von mir (theorethisch) vorgeschlagen, oder sollte ich es doch besser mit volkard's Vorschlag probieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895703</guid><dc:creator><![CDATA[Avantarius]]></dc:creator><pubDate>Tue, 11 May 2010 12:48:20 GMT</pubDate></item><item><title><![CDATA[Reply to Ressourcen-Manager und Operator overloading on Tue, 11 May 2010 12:48:47 GMT]]></title><description><![CDATA[<p>Keine Ahnung, ob's was hilft.</p>
<pre><code class="language-cpp">class ResourceProvider {
  string pfad; // pfad zum file
  int ref_count; // anzahl der referenzen aufs objekt
  ResourceImp* data;
  //static list&lt;Resource *&gt; liste; //braucht keiner
  void lock() {
    if(refcount==0)
      data=ladeResource(pfad);
    ++refcount;
  }
  void unlock(){
    --refcount;
    //if(refcount==0)
    //  delete data;
  }
};
class Resource {
  RessourceProvider* prp;
  Resource(ResourceProvider&amp; rp)
  :prp(&amp;rp) {
    rp-&gt;lock();
  }
  ~Resource() {
    rp-&gt;unlock();
  }
  void tuwas(){
    pr-&gt;data-&gt;tuwas();
  }
};

// irgendwo später
ResourceProvider hintergrundbildHalter(&quot;higru.png&quot;);

//immer wieder mal
Resource hg(hintergrundbildHalter);
hg.tuwas();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1895705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895705</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 11 May 2010 12:48:47 GMT</pubDate></item><item><title><![CDATA[Reply to Ressourcen-Manager und Operator overloading on Tue, 11 May 2010 13:01:37 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Keine Ahnung, ob's was hilft.</p>
</blockquote>
<p>Schaut auf den ersten Blick ganz gut aus. Werde deinen Code jetzt mal austesten.</p>
<p>Danke an alle für die schnelle Hilfe! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1895721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1895721</guid><dc:creator><![CDATA[Avantarius]]></dc:creator><pubDate>Tue, 11 May 2010 13:01:37 GMT</pubDate></item></channel></rss>