字符串类中c_str函数的内存分配

Vin*_*yak 2 c++ string memory-management

我有一个类的成员函数,如下所述

int x(std::string &a, std::string &b) {
    char *ptr = another_member.getStringMember().c_str() //I am storing the pointer 
    cout << ptr << endl;
    a="hello";
    cout << ptr << endl; 
}
Run Code Online (Sandbox Code Playgroud)

输出是

StringMember

你好

你能解释一下为什么会这样吗?谢谢

Unc*_*ens 5

很可能是因为another_member.getStringMembera是相同的字符串.

在这种情况下,ptr在修改字符串后使用它实际上是不合法的,a="hello";因为变异操作会使先前获得的指针无效.