进来看看那哦,如下代码为什么输出不同
[code=C/C++][/code]
class Test3
{
public:
Test3(const char* q):p(q){}
//Test3(string s):p(s.c_str()){} ----->(a)
//Test3(const string& s):p(s.c_str()){} ----->(b)
void show()
{
fprintf(stdout, "%s\n", p);
}
private:
const char * p;
};
Test3 * p = new Test3("abc");
p->show();//输出"abc"
Test3 * q = new Test3(string("abc"));
q->show();//如果开了(a),输出烫烫烫烫; 如果开了(b),只输出一个回车
[解决办法]
string("abc"),创建一个内容为"abc"的string对象做参数
Test3()调用结束,该临时对象释放,所以p指向的并不是有效地址
string st("abc");
Test3 * q = new Test3(st);
[解决办法]
string 对象是局部的啊