我想在C ++中通过stringstream :: str()分配std :: string * ptr。 我下面有一节课。
class A{
public:
A():ptr(nullptr){
}
void read(string& filename){ // this file contains a text.
std::ifstream ifs(filename);
std::stringstream ss;
ss << ifs;
*ptr=ss.str();
ifs.close();
}
private:
std::string *ptr;
};
int main(void){
A a();
std::string file="./file";
a.read(file);
return 0;
}
我期待&#34; * ptr&#34;可以通过文本分配。 但是,分段错误发生在* ptr = ss.str()。 我怎样才能做到这一点? 我认为附加时态对象是下面的一种方法。
//instead of *ptr=ss.str();
std::string str=ss.str();
ptr = &str;
但我不想创建时态对象。 谢谢
答案 0 :(得分:1)
您必须将ptr
初始化为能够取消引用它。 (而不是nullptr
,显然不能解除引用)
A() {
ptr = new std::string();
}
~A() {
delete ptr;
}
此外,分配时间变量不是一种方法,因为在离开范围后,指针中会有垃圾