参考 c++ 临时字符串的内容
Referring to the contents of c++ temporary strings
以下代码正在工作,我正在尝试了解如何操作。
int Process::processTextFile(const boost::filesystem::path& infile)
{
const char *file = infile.string().c_str();
uint16_t num_lines = 0;
.
.
.
FILE *fp;
fp = fopen(file, "r");
.
.
//Use fp for reading and stuff.
}
据我了解infile.string()
创建了一个临时文件指向内容。语句结束的时刻(;)临时字符串应超出范围,导致文件成为悬空指针。
我将使用字符串而不是char*
但仍然需要了解我缺少什么。
编译器 - gcc 4.8.4
优化 - O3
infile.string()
返回类型为 std::string
的对象。.c_str()
返回指向对象某些内容的指针,因此file
是指向对象内容的指针。但是在语句的末尾,std::string
对象及其内容被破坏。因此,指针file
指向下一个语句开头的无处。
>C++指定将临时对象绑定到堆栈上的 const 引用会延长临时对象的生存期到引用本身的生存期,这意味着位于堆栈中的 const char *file。
此C++机制可避免您指出的悬空引用错误。在上面的代码中,临时存在,直到函数进程文本文件的右大括号。
您可以查看此 GOTW 以获取更多信息。