为什么boost shared_ptr包含带有close()的标头

Why does boost shared_ptr include header with close()?

本文关键字:close shared boost ptr 包含带 为什么      更新时间:2023-10-16

我使用的是boost 1.49.0,我想知道为什么boost::shared_ptr在全局命名空间中声明close(),也就是这个程序:

#include <boost/shared_ptr.hpp>
int main() {
  int h = 3;
  close(h);
  return 0;
}

编译并运行。我不希望close()是shared_ptr接口的一部分。对我来说,意外的结果是在我的程序中发现了一个错误,该错误使用了一个基于句柄的接口的C库。我没有调用库的handle-close函数,它有一个类似H5Dclose的独特名称(我使用的是hdf5库、C接口,而不是C++接口,事后看来,我不必担心C++接口的这种问题),而是错误地调用了close而不是H5Dclone,这最终导致了编译(并调用了unix、文件句柄close函数)。如果能得到一个编译器错误,那就太好了。

没有。该标头中没有符号close

我想Boost使用的一些标准头是在利用该标准的宽松性,使C库函数在全局命名空间中可用。

如果能得到一个编译器错误,那就太好了。

对我来说,为H5Dclose键入close远远超出了编译器错误的预期。无论如何,你的单元测试都会发现它,对吧?