<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Notes on programming</title>
	<atom:link href="http://divercide.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://divercide.wordpress.com</link>
	<description>Обьясните в нескольких словах, о чем этот блог!</description>
	<lastBuildDate>Sun, 22 Jan 2012 00:49:05 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='divercide.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Notes on programming</title>
		<link>http://divercide.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://divercide.wordpress.com/osd.xml" title="Notes on programming" />
	<atom:link rel='hub' href='http://divercide.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Присваивание через копирование</title>
		<link>http://divercide.wordpress.com/2008/09/18/%d0%bf%d1%80%d0%b8%d1%81%d0%b2%d0%b0%d0%b8%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%87%d0%b5%d1%80%d0%b5%d0%b7-%d0%ba%d0%be%d0%bf%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/</link>
		<comments>http://divercide.wordpress.com/2008/09/18/%d0%bf%d1%80%d0%b8%d1%81%d0%b2%d0%b0%d0%b8%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%87%d0%b5%d1%80%d0%b5%d0%b7-%d0%ba%d0%be%d0%bf%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/#comments</comments>
		<pubDate>Thu, 18 Sep 2008 07:45:48 +0000</pubDate>
		<dc:creator>divercide</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[cpp]]></category>

		<guid isPermaLink="false">http://divercide.wordpress.com/?p=5</guid>
		<description><![CDATA[У Александреску, в &#171;Современное проектирование на С++&#187;, нашел следующие строки: &#171;&#8230; однако, к счастью, Sutter (2000) описал очень остроумный способ, позволяющий реализовать оператор присваивания с помощью конструктора копирования. (Он настолько остроумен, что о нем обязательно следует прочитать. Этот способ был применен при реализации класса SmartPtr в библиотеке Loki.)&#187; Вот и решил узнать, как такое возможно. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=divercide.wordpress.com&amp;blog=4893913&amp;post=5&amp;subd=divercide&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>У Александреску, в &laquo;Современное проектирование на С++&raquo;, нашел следующие строки:</p>
<blockquote><p>&laquo;&#8230; однако, к счастью, Sutter (2000) описал очень остроумный способ, позволяющий реализовать оператор присваивания с помощью конструктора копирования. (Он настолько остроумен, что о нем <strong>обязательно</strong> следует прочитать. Этот способ был применен при реализации класса SmartPtr в библиотеке Loki.)&raquo;</p></blockquote>
<p>Вот и решил узнать, как такое возможно.<br />
Причина &#8211; банальная лень и надежда, что этот способ займет меньше строк кода.</p>
<p>Гугление и вопросы в irc результата не дали, поэтому пришлось выдавить из себя следующее:</p>
<pre>Foo&amp; Foo::<strong>operator</strong> = (<strong>const</strong> Foo&amp; src)
{
    <strong>if</strong> (<strong>this</strong> != &amp;src)
    {
        <strong>this</strong>-&gt;~Foo();
        <strong>new</strong>(<strong>static_cast</strong>&lt;<strong>void</strong>*&gt;(<strong>this</strong>)) Foo(src);
    }
    <strong>return</strong> *<strong>this</strong>;
}</pre>
<p>Если используется какой-нибудь класс а-ля двусвязный список, то удобно &#8211; не надо дублировать код. Вызываем явно деструктор для объекта, которому присваиваем новое значение &#8211; в результате и деструктор вызвали, и память осталась нашей. Потом оператор new создаёт временный объект Foo(src), и копирует его по адресу указателя this. Всё.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/divercide.wordpress.com/5/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/divercide.wordpress.com/5/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/divercide.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/divercide.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/divercide.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/divercide.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/divercide.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/divercide.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/divercide.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/divercide.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/divercide.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/divercide.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/divercide.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/divercide.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/divercide.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/divercide.wordpress.com/5/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=divercide.wordpress.com&amp;blog=4893913&amp;post=5&amp;subd=divercide&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://divercide.wordpress.com/2008/09/18/%d0%bf%d1%80%d0%b8%d1%81%d0%b2%d0%b0%d0%b8%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%87%d0%b5%d1%80%d0%b5%d0%b7-%d0%ba%d0%be%d0%bf%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/618db4da7858c44a70214b965b8decdf?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">divercide</media:title>
		</media:content>
	</item>
	</channel>
</rss>
