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

时间:2013-12-09 21:57:31

标签: c++ boost shared-ptr

我正在使用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库。而不是调用libary的句柄close函数,它具有像H5Dclose这样的独特名称(我正在使用hdf5库,C接口,而不是C ++接口,事后我不必担心这种问题C ++接口),我错误地调用了close而不是H5Dclose,这最终编译(并调用unix,文件句柄关闭函数)。得到编译器错误会很好。

1 个答案:

答案 0 :(得分:2)

It doesn't。该标题中没有符号close

我猜Boost使用的一些标准头文件正在利用标准的宽容来使C库函数在全局命名空间中可用。

  

得到编译器错误会很好。

close对于H5Dclose的错字{{1}}对我来说是超出预期编译器错误的方式。你的单元测试无论如何都会抓住它,对吗?