﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-小吴的自由天地-随笔分类-Boost学习</title><link>http://www.cppblog.com/Tim/category/17316.html</link><description>灵活的思考，严谨的实现&lt;br&gt;
什么是未定义的行为：你的计算机可能崩溃、地球可以停止自转、你可能飞到云上，也可能掉到了地狱里...</description><language>zh-cn</language><lastBuildDate>Sat, 16 Jul 2011 11:16:48 GMT</lastBuildDate><pubDate>Sat, 16 Jul 2011 11:16:48 GMT</pubDate><ttl>60</ttl><item><title>noncopyable </title><link>http://www.cppblog.com/Tim/archive/2011/07/16/151168.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Sat, 16 Jul 2011 08:26:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2011/07/16/151168.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/151168.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2011/07/16/151168.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/151168.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/151168.html</trackback:ping><description><![CDATA[<h4 class="docSection2Title">记住 the Big Three</h4>
<p class="docText">什么情况下我们需要自定义复制构造函数或赋值操作符？这个问题有一个通用的答案，一个几乎总是正确的答案：无论何时你需要定义析构函数、复制构造函数、或赋值操作符三个中的任意一个，你也需要定义另外两个。&nbsp;</p>
<p class="docText">要使用 <tt>boost::noncopyable</tt>, 你要从它私有地派生出不可复制类。虽然公有继承也可以，但这是一个坏习惯。公有继承对于阅读类声明的人而言，意味着IS-A (表示派生类IS-A 基类)关系，但表明一个类IS-A <tt>noncopyable</tt> 看起来有点不太对。要从<tt>noncopyable</tt>派生，就要包含 <tt>"boost/utility.hpp"</tt> 。</p><pre>#include "boost/utility.hpp"<br /><br />class please_dont_make_copies : boost::noncopyable {};<br /></pre><pre><p class="docText">以下情形下使用 <tt>noncopyable</tt> ：</p><ul><li><p class="docList">类型的复制和赋值都不被允许</p></li><li><p class="docList">复制和赋值的禁止应该尽可能明显</p></li></ul></pre><img src ="http://www.cppblog.com/Tim/aggbug/151168.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2011-07-16 16:26 <a href="http://www.cppblog.com/Tim/archive/2011/07/16/151168.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>checked_delete </title><link>http://www.cppblog.com/Tim/archive/2011/07/16/151165.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Sat, 16 Jul 2011 08:16:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2011/07/16/151165.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/151165.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2011/07/16/151165.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/151165.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/151165.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 删除一个动态分配的对象时，必须调用它的析构函数。如果这个类型是不完整的，即只有声明没有定义，那么析构函数可能会没被调用。这是一种潜在的危险状态，所以应该避免它。对于类模板及函数模板，风险会更大，因为无法预先知道会使用什么类型。使用 checked_delete 和 checked_array_delete, 可以解决这个删除不完整类型的问题。它没有运行期的额外开销，只是直接调用 delete, 因此说 checked_delete 带来的安全性实际上是免费的。<br><br>如果你需要在调用delete时确保类型是完整的，就使用 checked_delete 。&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2011/07/16/151165.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/151165.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2011-07-16 16:16 <a href="http://www.cppblog.com/Tim/archive/2011/07/16/151165.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>函数对象与高级编程 学习</title><link>http://www.cppblog.com/Tim/archive/2011/07/15/151057.html</link><dc:creator>Tim</dc:creator><author>Tim</author><pubDate>Fri, 15 Jul 2011 04:19:00 GMT</pubDate><guid>http://www.cppblog.com/Tim/archive/2011/07/15/151057.html</guid><wfw:comment>http://www.cppblog.com/Tim/comments/151057.html</wfw:comment><comments>http://www.cppblog.com/Tim/archive/2011/07/15/151057.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Tim/comments/commentRss/151057.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Tim/services/trackbacks/151057.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 函数对象与高级编程 学习&nbsp;&nbsp;<a href='http://www.cppblog.com/Tim/archive/2011/07/15/151057.html'>阅读全文</a><img src ="http://www.cppblog.com/Tim/aggbug/151057.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Tim/" target="_blank">Tim</a> 2011-07-15 12:19 <a href="http://www.cppblog.com/Tim/archive/2011/07/15/151057.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>