<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://mit.spbau.ru/sewiki/index.php?action=history&amp;feed=atom&amp;title=%22shared_ptr%22</id>
		<title>&quot;shared ptr&quot; - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://mit.spbau.ru/sewiki/index.php?action=history&amp;feed=atom&amp;title=%22shared_ptr%22"/>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%22shared_ptr%22&amp;action=history"/>
		<updated>2026-05-01T18:12:39Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%22shared_ptr%22&amp;diff=9925&amp;oldid=prev</id>
		<title>Linsky: Новая страница: «&lt;pre&gt; #ifndef _SHAREDPTR_H_ #define _SHAREDPTR_H_  #include &quot;GaussNumber.h&quot; #define NULL 0  class Storage {  private: 	GaussNumber *p_obj; 	int count;  public: 	S…»</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%22shared_ptr%22&amp;diff=9925&amp;oldid=prev"/>
				<updated>2016-12-27T10:00:17Z</updated>
		
		<summary type="html">&lt;p&gt;Новая страница: «&amp;lt;pre&amp;gt; #ifndef _SHAREDPTR_H_ #define _SHAREDPTR_H_  #include &amp;quot;GaussNumber.h&amp;quot; #define NULL 0  class Storage {  private: 	GaussNumber *p_obj; 	int count;  public: 	S…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifndef _SHAREDPTR_H_&lt;br /&gt;
#define _SHAREDPTR_H_&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;GaussNumber.h&amp;quot;&lt;br /&gt;
#define NULL 0&lt;br /&gt;
&lt;br /&gt;
class Storage {&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
	GaussNumber *p_obj;&lt;br /&gt;
	int count;&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
	Storage(GaussNumber *p_obj);&lt;br /&gt;
	~Storage();&lt;br /&gt;
	void increaseCount();&lt;br /&gt;
	void decreaseCount();&lt;br /&gt;
	GaussNumber *ptr() const;&lt;br /&gt;
	bool isNull() const;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class shared_ptr {&lt;br /&gt;
&lt;br /&gt;
private:&lt;br /&gt;
	Storage *storage;&lt;br /&gt;
&lt;br /&gt;
public:&lt;br /&gt;
	shared_ptr();&lt;br /&gt;
	shared_ptr(GaussNumber *p_obj);&lt;br /&gt;
	shared_ptr(const shared_ptr &amp;amp;sptr);&lt;br /&gt;
	~shared_ptr();&lt;br /&gt;
	const shared_ptr &amp;amp;operator=(const shared_ptr &amp;amp;sptr);&lt;br /&gt;
	GaussNumber &amp;amp;operator*() const;&lt;br /&gt;
	GaussNumber *operator-&amp;gt;() const;&lt;br /&gt;
	GaussNumber *ptr() const;&lt;br /&gt;
	bool isNull() const;&lt;br /&gt;
&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
#include &amp;quot;shared_ptr.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// Storage class definitions&lt;br /&gt;
&lt;br /&gt;
Storage::Storage(GaussNumber *p_obj) {&lt;br /&gt;
	this-&amp;gt;p_obj = p_obj;&lt;br /&gt;
	count = 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Storage::~Storage() {&lt;br /&gt;
	if (p_obj != NULL)&lt;br /&gt;
		delete p_obj;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Storage::increaseCount() {&lt;br /&gt;
	count++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Storage::decreaseCount() {&lt;br /&gt;
	count--;&lt;br /&gt;
&lt;br /&gt;
	if (count == 0)&lt;br /&gt;
		delete this;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GaussNumber *Storage::ptr() const {&lt;br /&gt;
	return p_obj;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool Storage::isNull() const {&lt;br /&gt;
	if (p_obj == NULL)&lt;br /&gt;
		return true;&lt;br /&gt;
	else&lt;br /&gt;
		return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// shared_ptr class definitions&lt;br /&gt;
&lt;br /&gt;
shared_ptr::shared_ptr() {&lt;br /&gt;
	storage = new Storage(NULL);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
shared_ptr::shared_ptr(GaussNumber *p_obj) {&lt;br /&gt;
	storage = new Storage(p_obj);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
shared_ptr::shared_ptr(const shared_ptr &amp;amp;sptr) {&lt;br /&gt;
	storage = sptr.storage;&lt;br /&gt;
	storage-&amp;gt;increaseCount();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
shared_ptr::~shared_ptr() {&lt;br /&gt;
	storage-&amp;gt;decreaseCount();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
const shared_ptr &amp;amp;shared_ptr::operator=(const shared_ptr &amp;amp;sptr) {&lt;br /&gt;
	sptr.storage-&amp;gt;increaseCount();&lt;br /&gt;
	storage-&amp;gt;decreaseCount();&lt;br /&gt;
	&lt;br /&gt;
	storage = sptr.storage;&lt;br /&gt;
	return *this;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GaussNumber &amp;amp;shared_ptr::operator*() const {&lt;br /&gt;
	return *storage-&amp;gt;ptr();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GaussNumber *shared_ptr::operator-&amp;gt;() const {&lt;br /&gt;
	return storage-&amp;gt;ptr();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GaussNumber *shared_ptr::ptr() const {&lt;br /&gt;
	return storage-&amp;gt;ptr();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool shared_ptr::isNull() const {&lt;br /&gt;
	return storage-&amp;gt;isNull();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Linsky</name></author>	</entry>

	</feed>