如果我打开一个文件并读入一个长流,并且我想要它的数据,我发现以下内容不起作用,因为str()
的{{1}}方法返回临时的副本,一旦返回就会被销毁。所以以下内容不起作用:
std::stringstream
所以我实际上必须有std::stringstream ss;
ss << largeFile.rdbuf();
const char* ptr = ss.str().c_str(); // ptr is a dangling pointer
的临时std::string
才能复制到ss.str()
。这最终(如果我理解正确),字符串类的复制赋值运算符在两个std::string
对象之间执行一次深度复制,包括它包含的整个缓冲区。但实际上这种情况发生了两次,因为我发现的临时副本在ss.str().c_str()
返回后被破坏也是一对一副本。
我对此感到有点困惑。我不擅长编程,我试图想办法避免复制大缓冲区。感谢。