首页 C++系列8:const与生命周期
文章
取消

C++系列8:const与生命周期

1
const char* p = qString.toStdString().c_str()

这种方式,toStdString()会生成一个临时对象,执行c_str()后就消亡了

如果把qString.toStdString().c_str()直接放在printf里面输出是没问题的。

但是如果把p传给第3方库接口或后面再使用p就容易出现野指针问题。

解决:

使用const引用延长生命周期一直到当前的局部作用域结束。

1
2
3
4
5
{
	const string& pstr= qString.toStdString();
	const char *p = pstr.c_str()
	...//use p
}

或者不用QString,直接使用std::string。就不会生成临时对象了。

本文由作者按照 CC BY 4.0 进行授权