首页 新闻 会员 周边

一个关于STL的内存问题,不懂了

0
悬赏园豆:10 [已解决问题] 解决于 2008-08-06 07:28
<P><FONT face=Verdana>程序如下:</FONT></P> <P><FONT face=Verdana>#include &lt;iostream&gt;<BR>#include &lt;vector&gt;<BR>using namespace std;</FONT></P> <P><FONT face=Verdana>class A<BR>{<BR>public:<BR>&nbsp;A()<BR>&nbsp;{</FONT></P> <P><FONT face=Verdana>&nbsp;&nbsp;cout&lt;&lt;"A is fucking"&lt;&lt;endl;<BR>&nbsp;}<BR>&nbsp;A(const A&amp; a)<BR>&nbsp;{<BR>&nbsp;&nbsp;cout&lt;&lt;"A is copying"&lt;&lt;endl;<BR>&nbsp;}<BR>&nbsp;~A()<BR>&nbsp;{</FONT></P> <P><FONT face=Verdana>&nbsp;&nbsp;cout&lt;&lt;"delete A"&lt;&lt;endl;<BR>&nbsp;}<BR>private:<BR>&nbsp;//char *ptr;<BR>};</FONT></P> <P><FONT face=Verdana>int main()<BR>{<BR>&nbsp;vector&lt;A&gt; oo;<BR>&nbsp;A o;<BR>&nbsp;oo.push_back(o);&nbsp; //构造三次,析构三次<BR>&nbsp;oo.push_back(o);&nbsp; //&nbsp;构造六次,析构六次<BR>&nbsp;return 0;<BR>}</FONT></P> <P>第一次调用oo.push_back(o);&nbsp; 调用了一次operator new,申请了4字节的空间,构造了三次然后析构了三次,当然有一次是A的构造和析构</P> <P>第二次调用oo.push_back(o);&nbsp; 又调用了一次operator new,申请了8字节的空间,构造了六次然后析构了六次。</P> <P>如果再次调用oo.push_back(o);&nbsp; 构造10次会</P> <P>不明白vector内部怎么实现的内存控制,或者说怎么分配的空间。</P> <P>疑问中......</P>
Conster康的主页 Conster康 | 初学一级 | 园豆:190
提问于:2008-07-30 21:36
< >
分享
最佳答案
0
stl 在不同编译器下的分配方式不同 一般vector分配双倍于当前容器的存储区, 先拷贝当前值到新分配内存中, 再释放原来的内存 好像是先使用后偿还的机制吧...这个还要看源代码
Da Vinci | 菜鸟二级 |园豆:220 | 2008-08-01 10:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册