最近老是觉得c++的string表现怪异,写了一个简单的程序测试(如下),果真是string搞的鬼,高手能解释一下为何吗?
#include <string>
#include <iostream>
using namespace std;
int main()
{
char *s1 = "abc";
string str1;
str1.append(s1);
s1 = "dde";
string str2(s1); //报错,断点停止这里,提示:已触发了一个断点。
delete s1; //若此句去掉,程序不会出现上面错误,运行结果也正常
cout << str1.c_str();
cout << str2.c_str();
int i;
cin >> i;
return 0;
}
这段代码看来对string的用法很正常,但是为什么释放s1会导致前面str2构造失败,str2构造是在释放s1之前啊,而且str2不是使用它的值初始化自己而已吗?还有一个特点,无论delete放在string str2(s1)之后return之前的任何地方,断点总是执行到delete之前的一个语句报错,永远执行不到delete语句,真是神奇!困惑中,哪位高手能解释个所以然啊?环境vc++.net2015