<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/1.5.1-alpha" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>Comments on: Singleton con y sin Singleton</title>
	<link>http://rfog.blogsome.com/2008/03/03/singleton-con-y-sin-singleton/</link>
	<description>Mi blog personal. Si no te gusta, no lo leas.</description>
	<pubDate>Sat, 11 Oct 2008 10:59:08 +0000</pubDate>
	<generator>http://wordpress.org/?v=1.5.1-alpha</generator>

	<item>
		<title>by: Bartomeu</title>
		<link>http://rfog.blogsome.com/2008/03/03/singleton-con-y-sin-singleton/#comment-499</link>
		<pubDate>Mon, 03 Mar 2008 22:32:52 +0000</pubDate>
		<guid>http://rfog.blogsome.com/2008/03/03/singleton-con-y-sin-singleton/#comment-499</guid>
					<description>Además de los problemas que citas hay otro que sólo he visto tratado en un libro: ¿Cómo, cuándo y quién destruye el singleton?

Supongo que en C# se encarga el recolector de basura, pero no parece muy elegante. Como no conozco el C# te pongo la solución que yo utilizo en C++, por si la consideras interesante y es facilmente trasladable a C#

Observarás que no hay contador de instancias y por lo tanto no hay necesidad de provocar ninguna excepción, ya que no hace falta poner 'new' en ningún sitio.

Para finalizar. No entiendo lo de los singletones anidados, Con esta estructura puedes tener varios singletones (singleton_recurso_a, singleton_recurso_b, ...) que se utilicen simultaneamente y se llamen entre ellos sin ningún problema.

class singleton {
	public:
		// La única manera de acceder al singleton es mediante esta función
		// fíjarse que es una función estática
		static singleton *Instancia(void);

		// Por si hay que poner un valor inicial, o en cualquier
		// momento que quiera el usuario
		void Init(int n) { m_numero = n;}

		void DiNumero() { std::out DiNumero();
	singleton::Instancia()-&amp;gt;DiNumero();
	singleton::Instancia()-&amp;gt;DiNumero();

	// Otra manera de usarlo, si se tiene que utilizar el singleton
	// de manera repetitiva , por ejemplo en un bucle
	// Se ganar algo de tiempo de ejecución
	singleton *Singleton = singleton::Instancia();

	// Cambiamos el contador
	Singleton-&amp;gt;Init(34);
	for (int i=0; iDiNumero();
	} // Aqui se destruirá el singleton
</description>
		<content:encoded><![CDATA[	<p>Además de los problemas que citas hay otro que sólo he visto tratado en un libro: ¿Cómo, cuándo y quién destruye el singleton?</p>
	<p>Supongo que en C# se encarga el recolector de basura, pero no parece muy elegante. Como no conozco el C# te pongo la solución que yo utilizo en C++, por si la consideras interesante y es facilmente trasladable a C#</p>
	<p>Observarás que no hay contador de instancias y por lo tanto no hay necesidad de provocar ninguna excepción, ya que no hace falta poner &#8216;new&#8217; en ningún sitio.</p>
	<p>Para finalizar. No entiendo lo de los singletones anidados, Con esta estructura puedes tener varios singletones (singleton_recurso_a, singleton_recurso_b, &#8230;) que se utilicen simultaneamente y se llamen entre ellos sin ningún problema.</p>
	<p>class singleton {<br />
	public:<br />
		// La única manera de acceder al singleton es mediante esta función<br />
		// fíjarse que es una función estática<br />
		static singleton *Instancia(void);</p>
	<p>		// Por si hay que poner un valor inicial, o en cualquier<br />
		// momento que quiera el usuario<br />
		void Init(int n) { m_numero = n;}</p>
	<p>		void DiNumero() { std::out DiNumero();<br />
	singleton::Instancia()-&gt;DiNumero();<br />
	singleton::Instancia()-&gt;DiNumero();</p>
	<p>	// Otra manera de usarlo, si se tiene que utilizar el singleton<br />
	// de manera repetitiva , por ejemplo en un bucle<br />
	// Se ganar algo de tiempo de ejecución<br />
	singleton *Singleton = singleton::Instancia();</p>
	<p>	// Cambiamos el contador<br />
	Singleton-&gt;Init(34);<br />
	for (int i=0; iDiNumero();<br />
	} // Aqui se destruirá el singleton
</p>
]]></content:encoded>
				</item>
</channel>
</rss>
