const char* s = std::string("text").c_str();
std::cout << s << std::endl; //This will print nothing because the data
//isn't available any longer
std::string::c_str()
返回指向其存储数据的指针。考虑到std::string("text")
在我使用它的时候才可用(例如,当我用它来初始化另一个实例时),所以最后调用析构函数来删除数据,这反过来使s
指向任何东西。
现在我的问题是,是否存在保持原始数据存活的本机(独立于库)方法。或者它是否可能使用像共享智能指针这样的东西,它知道其他东西是否指向std::string
的数据,所以它还没有被删除。
不能使字符串在内部使用引用计数指针。如果您希望使用指向其数据的指针,则必须确保该字符串存活。唯一的选择是将数据复制/移动到另一个字符串对象中。