h0n9xu 2011-04-29 17:00
浏览 215
已采纳

string类的两个问题

看C++ primer 第四版(英文版)遇到了几个问题,请赐教!

问题1:用string,vector等包含的库是不是在iostream中有说明呢?在C++ primer的p132中提及When we compare library strings...这个意思不是要包含strings库吗?但是我在预编译加上#includeg++会报错(没有这个文件)?

问题2:在C++ primer的p86指出当一个string对象st1用另外一个string类对象str2赋值时所作的操作是:编译器需要delete和st1相关联的字符空间,并重新分配新的可供st2字符存放的空间,然后将st2对应的字符分配拷贝到st1中。
那么这里的st1所指的首地址是否改变呢?我一直以为是改变的,但是按照下面的程序看来是不变的,我想问一下这里到底做了什么呢?string类是不是可以动态分配同时可以自动回收空间,这和VLA是一个道理吗?
[code="c++"]
#include

int main(void)
{
std::string str1="str1\n";
std::cout < <str1;
std::cout < <str1.size() < <std::endl;

std::string str2(str1); 
std::cout < <str2 < <std::endl; 
std::cout < <"address of str1 :" < <&str1 < <std::endl; 
std::cout < <"address of str2 :" < <&str2 < <std::endl; 

std::string str3("str3\n"); 
str2=str3; 
std::cout < <"address of str3 :" < <&str3 < <std::endl; 
std::cout < <"address of str2 :" < <&str2 < <std::endl; 

return 0; 

}
[/code]

  • 写回答

4条回答 默认 最新

  • turing-complete 2011-04-29 19:01
    关注

    [quote]但是string不是内置类型,和int不同的啊,那本书p86说需要delete空间之后再重新分配的啊[/quote]

    这一点非常正确,但是delete不是需要程序员手动进行的,是在超出其作用域的时候编译器会自动插于析构函数的执行。

    简而言之,string类实例的复制,是“深复制”。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料