<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B%2FSmartPointer</id>
	<title>C++/SmartPointer - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=C%2B%2B%2FSmartPointer"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=C%2B%2B/SmartPointer&amp;action=history"/>
	<updated>2026-05-14T17:42:32Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=C%2B%2B/SmartPointer&amp;diff=84175&amp;oldid=prev</id>
		<title>Maintenance script: Repair batch-0001 pages from live compare</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=C%2B%2B/SmartPointer&amp;diff=84175&amp;oldid=prev"/>
		<updated>2026-03-26T23:56:03Z</updated>

		<summary type="html">&lt;p&gt;Repair batch-0001 pages from live compare&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:56, 26 March 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l120&quot;&gt;Line 120:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 120:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;이런게 있기 때문에 C++ 이 재미있는게 아닐까? - &amp;amp;#91;eternalbleu&amp;amp;#93;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;이런게 있기 때문에 C++ 이 재미있는게 아닐까? - &amp;amp;#91;eternalbleu&amp;amp;#93;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    이런걸 안써도 되어서 Python이 재미있는 것일지도. (하지만 Extending 쪽에서는 결국 써야 하는.. 흑) --&amp;amp;#91;1002&amp;amp;#93;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    이런걸 안써도 되어서 Python이 재미있는 것일지도. (하지만 Extending 쪽에서는 결국 써야 하는.. 흑) --&amp;amp;#91;1002&amp;amp;#93;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=C%2B%2B/SmartPointer&amp;diff=29868&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:22, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=C%2B%2B/SmartPointer&amp;diff=29868&amp;oldid=prev"/>
		<updated>2021-02-07T05:22:45Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= smart pointer =&lt;br /&gt;
 #ifndef _SMARTPTR_H&lt;br /&gt;
 #define _SMARTPTR_H&lt;br /&gt;
 &lt;br /&gt;
 // reference countable smart point&lt;br /&gt;
 // circular member setting will not free memory&lt;br /&gt;
 //&lt;br /&gt;
 // eg) &lt;br /&gt;
 // CA has SmartPtr&amp;amp;lt;CB&amp;amp;gt; member and CB has SmartPtr&amp;amp;lt;CA&amp;amp;gt; member.&lt;br /&gt;
 // In other word, each object has the other object&amp;#039;s smart pointer.&lt;br /&gt;
 // CA will be freed after CB is freed, and vise versa.&lt;br /&gt;
 // Memory will not be freed forever.&lt;br /&gt;
 &lt;br /&gt;
 template&amp;amp;lt;class _Ty&amp;amp;gt;&lt;br /&gt;
 class SmartPtr {&lt;br /&gt;
 	struct RefPtr {&lt;br /&gt;
 		_Ty *_Ptr;&lt;br /&gt;
 		int _Refcnt;&lt;br /&gt;
 	};&lt;br /&gt;
 public:&lt;br /&gt;
 	typedef _Ty element_type;&lt;br /&gt;
 	explicit SmartPtr(_Ty *_P = 0) throw ()&lt;br /&gt;
 	{&lt;br /&gt;
 		if(_P != 0)&lt;br /&gt;
 		{&lt;br /&gt;
 			_Ptr = new RefPtr;&lt;br /&gt;
 			_Ptr-&amp;amp;gt;_Ptr = _P;&lt;br /&gt;
 			_Ptr-&amp;amp;gt;_Refcnt = 0;&lt;br /&gt;
 &lt;br /&gt;
 			IncRefcnt();&lt;br /&gt;
 		}&lt;br /&gt;
 		else&lt;br /&gt;
 			_Ptr = 0;&lt;br /&gt;
 	}&lt;br /&gt;
 	SmartPtr(const SmartPtr&amp;amp;lt;_Ty&amp;amp;gt;&amp;amp;amp; _Y) throw ()&lt;br /&gt;
 		: _Ptr(_Y._Ptr) &lt;br /&gt;
 	{&lt;br /&gt;
 		IncRefcnt();&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	SmartPtr&amp;amp;lt;_Ty&amp;amp;gt;&amp;amp;amp; operator=(const SmartPtr&amp;amp;lt;_Ty&amp;amp;gt;&amp;amp;amp; _Y) throw ()&lt;br /&gt;
 	{&lt;br /&gt;
 		if (this != &amp;amp;amp;_Y)&lt;br /&gt;
 		{&lt;br /&gt;
 			if (_Ptr != _Y._Ptr)&lt;br /&gt;
 			{&lt;br /&gt;
 				DecRefcnt();&lt;br /&gt;
 &lt;br /&gt;
 				_Ptr = _Y._Ptr;&lt;br /&gt;
 &lt;br /&gt;
 				IncRefcnt();&lt;br /&gt;
 			}&lt;br /&gt;
 		}&lt;br /&gt;
 		return (*this); &lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	~SmartPtr()&lt;br /&gt;
 	{&lt;br /&gt;
 		DecRefcnt();&lt;br /&gt;
 	}&lt;br /&gt;
 	_Ty&amp;amp;amp; operator*() const throw ()&lt;br /&gt;
 		{return (*get()); }&lt;br /&gt;
 	_Ty *operator-&amp;amp;gt;() const throw ()&lt;br /&gt;
 		{return (get()); }&lt;br /&gt;
 	_Ty *get() const throw ()&lt;br /&gt;
 		{return (_Ptr-&amp;amp;gt;_Ptr); }&lt;br /&gt;
 	_Ty *release() throw ()&lt;br /&gt;
 	{&lt;br /&gt;
 		_Ty *_tPtr = _Ptr-&amp;amp;gt;_Ptr;&lt;br /&gt;
 		if(_Ptr)&lt;br /&gt;
 		{&lt;br /&gt;
 			--(_Ptr-&amp;amp;gt;_Refcnt);&lt;br /&gt;
 			if(_Ptr-&amp;amp;gt;_Refcnt &amp;amp;lt;= 0)&lt;br /&gt;
 			{&lt;br /&gt;
 			}&lt;br /&gt;
 			_Ptr = NULL;&lt;br /&gt;
 		}&lt;br /&gt;
 		&lt;br /&gt;
 		return (_tPtr); &lt;br /&gt;
 	}&lt;br /&gt;
 	bool operator !()&lt;br /&gt;
 	{&lt;br /&gt;
 		if(_Ptr == 0) return TRUE;&lt;br /&gt;
 		return FALSE;&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	template&amp;amp;lt;class _OTy&amp;amp;gt;&lt;br /&gt;
 	operator SmartPtr&amp;amp;lt;_OTy&amp;amp;gt;()&lt;br /&gt;
 	{&lt;br /&gt;
 		return SmartPtr&amp;amp;lt;_OTy&amp;amp;gt; (_Ptr);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 private:&lt;br /&gt;
 	void IncRefcnt()&lt;br /&gt;
 	{&lt;br /&gt;
 		if(_Ptr)&lt;br /&gt;
 			++(_Ptr-&amp;amp;gt;_Refcnt);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	void DecRefcnt()&lt;br /&gt;
 	{&lt;br /&gt;
 		if(_Ptr)&lt;br /&gt;
 		{&lt;br /&gt;
 			--(_Ptr-&amp;amp;gt;_Refcnt);&lt;br /&gt;
 			if(_Ptr-&amp;amp;gt;_Refcnt &amp;amp;lt;= 0)&lt;br /&gt;
 			{&lt;br /&gt;
 				delete _Ptr-&amp;amp;gt;_Ptr;&lt;br /&gt;
 				_Ptr-&amp;amp;gt;_Ptr = NULL;&lt;br /&gt;
 				delete _Ptr;&lt;br /&gt;
 			}&lt;br /&gt;
 			_Ptr = NULL;&lt;br /&gt;
 		}&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 private:&lt;br /&gt;
 	RefPtr *_Ptr;&lt;br /&gt;
 };&lt;br /&gt;
 #endif&lt;br /&gt;
= thread =&lt;br /&gt;
이런게 있기 때문에 C++ 이 재미있는게 아닐까? - &amp;amp;#91;eternalbleu&amp;amp;#93;&lt;br /&gt;
   이런걸 안써도 되어서 Python이 재미있는 것일지도. (하지만 Extending 쪽에서는 결국 써야 하는.. 흑) --&amp;amp;#91;1002&amp;amp;#93;&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>