C++;目录迭代器 自从我和C++一起工作已经有一段时间了,请原谅我的新问题。

C++;目录迭代器 自从我和C++一起工作已经有一段时间了,请原谅我的新问题。,c++,boost,boost-filesystem,C++,Boost,Boost Filesystem,我编写了以下代码以获取目录内容的列表,该代码运行良好: for (directory_iterator end, dir("./"); dir != end; dir++) { std::cout << *dir << std::endl; } 谢谢,, 艾哈迈德。来自: 未定义结束迭代器上运算符*的结果。无论如何 返回const directory_entry&的其他迭代器值 关于函数调用,我认为最简单的方法是: using namespace bo

我编写了以下代码以获取目录内容的列表,该代码运行良好:

for (directory_iterator end, dir("./");
     dir != end; dir++) {
    std::cout << *dir << std::endl;
}
谢谢,, 艾哈迈德。

来自:

未定义结束迭代器上运算符*的结果。无论如何 返回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);

据我所知,它返回一个目录\ u entry.Cool(对我来说)是有意义的。我看了“类路径”(class path)的定义,有人能给我指一下用来创建“\u path”的构造函数吗。我的意思是,“类路径”的哪个构造函数接受“目录\条目”。非常感谢。在您的代码中,到底传递给function1()的是什么,指向类型为“path”的对象的指针,还是“object path”,在这种情况下,function1()将复制到堆栈上?
我问的原因是,如果指向“path”的指针被发送到function1(),该指针(对象)会不会for循环完成后是否无效?在您发表评论之前,我更新了答案。如果参数是“boost::filesystem::path this_path”,它将执行对象的一个副本。如果在大多数情况下我们不知道(或不想知道)对象的大小,那么将对象作为参数而不是指向它的指针传递是否有效?作为一种通用的编程风格,我想这取决于你如何使用函数中的对象。就个人而言,我不喜欢在一个方法中分配对象,在另一个方法中释放它。在这种情况下,第一个路径对象可以是一个引用,因此只创建了一个副本。Callja:我完全同意你的看法,在一个函数(我的例子中是线程)中分配,在另一个函数(线程)中释放。下面是我的代码流,这可能会对我的逻辑有所帮助:(1)func1()找到具有特定属性的文件,将其放入队列中。另一个函数(线程)从队列中提取该路径并处理该文件。我认为最有效的方法是在function1()中分配一个路径,将int放入队列,function2()获取它,然后释放它。
void function1(const boost::filesystem::path this_path);