boost下std::string输出问题

C++语言 码拜 9年前 (2016-05-22) 1174次浏览
int main()
{
	std::vector<boost::any> some_value;
	some_value.push_back(10);
	const char* szStr = "Holle Word!";
	some_value.push_back(szStr);
	some_value.push_back(std::string("Wow!"));
	std::string& s = boost::any_cast<std::string&>(some_value.back());
	s += " This is great!";
	std::cout << boost::any_cast<std::string&>(some_value.back()).c_str() << std::endl;
	std::cout << s.c_str() << std::endl;
	some_value.push_back(1.1f);
	std::for_each(some_value.begin(), some_value.end(), doType());
	return 0;
}

这个代码中的
std::cout << s.c_str() << std::endl;
some_value.push_back(1.1f);
这两行改变顺序程序旧崩溃,是什么原因啊?

解决方案

5

你的s持有的是some_value栈顶的地址
当你push之后栈顶的数据就变了,假如它正好不是一个string,就容易出错
不推荐使用boost部分库的原因就是假如你不清楚boost的实现,那很容易出问题

10

原因应该在于:
vector::push_back操作可能会导致原有迭代器、数据应用失效!假如vector在push_back的时候空间不足,它就会重新分配一块更大的空间,然后把原来的数据复制过来,s是原来空间的一个对象的引用:

原因应该在于:
vector::push_back操作可能会导致原有迭代器、数据应用失效!假如vector在push_back的时候空间不足,它就会重新分配一块更大的空间,然后把原来的数据复制过来,s是原来空间的一个对象的引用,但现在那块空间可能已经不存在了。

++


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明boost下std::string输出问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)