﻿<?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++博客-静水流深</title><link>http://www.cppblog.com/melanie/</link><description>melanie的天地</description><language>zh-cn</language><lastBuildDate>Tue, 09 Jun 2026 21:44:15 GMT</lastBuildDate><pubDate>Tue, 09 Jun 2026 21:44:15 GMT</pubDate><ttl>60</ttl><item><title>内存基本处理工具</title><link>http://www.cppblog.com/melanie/archive/2010/03/18/110007.html</link><dc:creator>melanie</dc:creator><author>melanie</author><pubDate>Thu, 18 Mar 2010 07:45:00 GMT</pubDate><guid>http://www.cppblog.com/melanie/archive/2010/03/18/110007.html</guid><wfw:comment>http://www.cppblog.com/melanie/comments/110007.html</wfw:comment><comments>http://www.cppblog.com/melanie/archive/2010/03/18/110007.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/melanie/comments/commentRss/110007.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/melanie/services/trackbacks/110007.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; &nbsp;STL定义五个全局函数，作用于未初始化窨上。这样的功能对于窗口的实现很有帮助，用于<span>构造的constrcut（）函数和用于析构的destroy()，</span>另三个函数是<span style="COLOR: #800000">uninitialized_copy(),是uninitialized_fill(),uninitialized_fill_n()</span>分别对应于高导次函数copy(),fill(),fill_n() 这些都是STL,前三个低层次函数的使用应该包含&lt;memory&gt;<br>&nbsp;&nbsp;&nbsp; construct()接受一个指针p和一个初值value,该函数的用途就是将初值设定到指定的空间上。C++的placement new运算子来完成这一任务，<span style="COLOR: #800000">construct与new不同，construct是在没有初始化的内存上构造新对象，而new一经分配内存必须进行初始化<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">vector</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;A<br><img id=Codehighlighter1_65_105_Open_Image onclick="this.style.display='none'; Codehighlighter1_65_105_Open_Text.style.display='none'; Codehighlighter1_65_105_Closed_Image.style.display='inline'; Codehighlighter1_65_105_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_65_105_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_65_105_Closed_Text.style.display='none'; Codehighlighter1_65_105_Open_Image.style.display='inline'; Codehighlighter1_65_105_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_65_105_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_65_105_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img id=Codehighlighter1_86_103_Open_Image onclick="this.style.display='none'; Codehighlighter1_86_103_Open_Text.style.display='none'; Codehighlighter1_86_103_Closed_Image.style.display='inline'; Codehighlighter1_86_103_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_86_103_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_86_103_Closed_Text.style.display='none'; Codehighlighter1_86_103_Open_Image.style.display='inline'; Codehighlighter1_86_103_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a)</span><span id=Codehighlighter1_86_103_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_86_103_Open_Text><span style="COLOR: #000000">{cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">A</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_119_247_Open_Image onclick="this.style.display='none'; Codehighlighter1_119_247_Open_Text.style.display='none'; Codehighlighter1_119_247_Closed_Image.style.display='inline'; Codehighlighter1_119_247_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_119_247_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_119_247_Closed_Text.style.display='none'; Codehighlighter1_119_247_Open_Image.style.display='inline'; Codehighlighter1_119_247_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_119_247_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_119_247_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">a;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;a=new&nbsp;A;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">new分配内存后必须构造</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;A(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">A</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;B;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">由此说明vector使用的是内存分配与对象构造相分离的技术即预分配技术</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<br></span>&nbsp;&nbsp; destory()有两个版本，第一版本接受一个指针，准务将该指针所指之物析构掉。这很简单，直接调用该对象的构构函数即可。第二版本接受first和last两个迭代器，准备将两个迭代器内的所有对象都析构掉。我们不知道这个范围有多大，万一很大，而每个对象的析构函数都无关痛痒（所谓trivial destructor），那么一次次调用这些无关痛痒的函数对效率是一种伤害。首先利用value_type()获得迭代器所指对象的型别，再利用_type_trait&lt;T&gt;判断该型别的析构函灵敏是否无关痛痒。叵是(_true_type)，则什么也不做就结束；若否(_false_type)，这才以循环方式巡访整个范转，并在循环中每经历史潮流个对象就调用第一个版本的destory 
<img src ="http://www.cppblog.com/melanie/aggbug/110007.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/melanie/" target="_blank">melanie</a> 2010-03-18 15:45 <a href="http://www.cppblog.com/melanie/archive/2010/03/18/110007.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>