当超过15个字符时,我遇到了const引用字符串的奇怪行为。它只是用空字节替换字符串的开头。
Class A
{
public:
A(const std::string& str) : str_(str)
{
std::cout << str_ << std::endl;
}
void test()
{
std::cout << str_ << std::endl;
}
private:
const std::string& str;
};
int main()
{
//printing the full string "01234567890123456789"
A a("01234567890123456789");
//replacing first bytes by '\0', printing "890123456789"
a.test();
}
只有超过15个字符的字符串才会发生这种情况。如果删除了该类属性中的const &
,我不会再遇到这个问题我在代码中遇到其他项目内存泄漏时字符串超过15个字符,所以我想知道:
当字符串超过15个字符时,实际发生了什么?
答案 0 :(得分:1)
str_
是对临时对象的引用。当您在构造函数的主体中使用str_
时,临时值仍然存在。在str_
中使用test
时,暂时不再存在。
您的程序有不确定的行为。