我在OSX 10.9.2上使用Xcode5 / clang。 我的计划开始采取行动
std::ifstream file(path);
if (!file.is_open())
throw std::runtime_error("somethings wrong");
几百(或几千?)打开和关闭文件后的。 当发生这种情况时,我无法打开任何文件,无论是使用fstream还是使用fopen(),这让我觉得我用完了文件描述符。 根据ifstream上的文档,当fstream对象被销毁时,文件将被关闭。我的所有fstream对象都存在于堆栈中,我从来没有用new分配任何对象,所以如果我的堆栈被正确清理,我不必调用fstream :: close(),因为当对象超出范围时,文件已关闭。
但显然,我仍在某处泄露文件描述符。
问题: 1.即使ifsteam对象按计划清理,我是否可以用完文件描述符?比如,文件描述符可以在它们关闭后重新使用,还是一旦使用和关闭它们就会永远消失? 2.有没有办法可以泄漏fstream对象,让它们打开,即使它们都在我的堆栈上?
答案 0 :(得分:0)
没关系,我发现了我的问题。
我根本没有泄漏fstream对象,但是我一直在疯狂地泄漏sqlite句柄。 我通过仔细使用
找到了它lsof -p my_processes_pid | wc
lsof是一个非常有用的命令!