自从我使用C ++以来已经有一段时间了,请原谅我的新手问题。
我编写了以下代码来获取目录内容的列表,该工作正常:
for (directory_iterator end, dir("./");
dir != end; dir++) {
std::cout << *dir << std::endl;
}
“* dir”返回什么,指针是“char数组”,是指向“string”对象的指针,还是指向“path”对象的指针?
我想将“* dir”(如果以.cpp结尾)传递给另一个函数(),该函数将在稍后(异步)对其进行操作。我猜我需要复制“* dir”。我写了以下代码:
path *_path;
for (directory_iterator end, dir("./");
dir != end; dir++) {
_path = new path(*dir);
if (_path->extension() == ".cpp") {
function1(_path); // function1() will free _path
} else
free(_path);
}
谢谢你, 艾哈迈德。
答案 0 :(得分:4)
来自documentation of boost::directory_iterator:
未定义end迭代器上的operator *的结果。任何 其他迭代器值为const directory_entry&amp;归还。
关于函数调用,我认为最简单的方法是:
using namespace boost::filesystem;
for (directory_iterator end, dir("./"); dir != end; dir++) {
const boost::filesystem::path &this_path = dir->path();
if (this_path.extension() == ".cpp") {
function1(this_path); // Nothing to free
}
}
其中function1方法可以声明为:
void function1(const boost::filesystem::path this_path);