4

自从我使用 C++ 以来已经有一段时间了,请原谅我的新手问题。

我编写了以下代码来获取目录内容的列表,它工作正常:

for (directory_iterator end, dir("./");
     dir != end; dir++) {
    std::cout << *dir << std::endl;
}

“*dir”返回什么,一个“char array”指针,一个指向“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);
}

谢谢你,艾哈迈德。

4

1 回答 1

4

boost::directory_iterator 的文档中

未定义结束迭代器上 operator* 的结果。对于任何其他迭代器值,都会返回 const directory_entry&。

关于函数调用,我认为最简单的方法是:

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);
于 2013-04-11T19:39:48.957 回答