std::string copy constructor NOT deep in GCC 4.1.2?

后端 未结 2 1549
日久生厌
日久生厌 2021-02-19 13:08

I wonder if i misunderstood something: does a copy constructor from std::string not copy its content?

string str1 = \"Hello World\"         


        
相关标签:
2条回答
  • 2021-02-19 14:05

    It is entirely possible that your string implementation uses copy-on-write which would explain the behavior. Although this is less likely with newer implementations (and non-conforming on C++11 implementations).

    The standard places no restriction on the value of the pointer returned by c_str (besides that it points to a null-terminated c-string), so your code is inherently non-portable.

    0 讨论(0)
  • 2021-02-19 14:12

    std::string implementation in your compiler must be reference counted. Change one of the strings and then check the pointers again - they would be different.

    string str1 = "Hello World";
    string str2(str1);
    
    if(str1.c_str() == str2.c_str()) // Same pointers!
      printf ("You will get into the IPC hell very soon!!");
    
    str2.replace(' ',',');
    
    // Check again here.
    

    These are 3 excellent articles on reference counted strings.

    http://www.gotw.ca/gotw/043.htm

    http://www.gotw.ca/gotw/044.htm

    http://www.gotw.ca/gotw/045.htm

    0 讨论(0)
提交回复
热议问题