码迷,mamicode.com
首页 > 编程语言 > 详细

c++ string写时复制

时间:2016-11-01 16:36:30      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:初始化   main   name   return   改变   turn   string   hello   内存   

  string写时复制:将字符串str1赋值给str2后,除非str1的内容已经被改变,否则str2和str1共享内存。当str1被修改之后,stl才为str2开辟内存空间,并初始化。

  

#include <cstring>
#include <string>
#include <cstdio>
#include <iostream>
using namespace std;

void fun1()
{
  string s1 = "hello, world!";
  string s2 = s1; 

  cout << "before: " << s2 << endl;
  char* ptr = const_cast<char*>(s1.c_str());
  *ptr = f;
  cout << "after: " << s2 << endl;
}

void fun2()
{
  string s1 = "hello, world!";
  string s2 = s1; 

  cout << "before: " << s2 << endl;
  s1[0] = f;
  cout << "after: " << s2 << endl;
}

int main()
{
  cout << "fun1: " << endl;
  fun1();

  cout << "fun2: " << endl;
  fun2();

  return 0;
}

注意:fun1中,通过char*修改s1行为,并不会触发stl的复制操作,因为stl并不认为通过char* 对s1的修改是对string s1的修改。

c++ string写时复制

标签:初始化   main   name   return   改变   turn   string   hello   内存   

原文地址:http://www.cnblogs.com/taiyang-li/p/6019914.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!