为什么const void *没有std :: free重载?

时间:2017-03-31 14:26:13

标签: c++ c++-standard-library

我使用extern C函数返回动态分配的const char*

我想使用unique_ptr<const char, decltype(std::free)>来管理它。

但是没有std::free(const void*)重载,所以我得到invalid conversion from 'const void*' to 'void*'并且必须使用const_cast<char*>()

这仅仅是标准库不完善还是背后还有其他东西?

1 个答案:

答案 0 :(得分:2)

std::free继承自C标准库。 C没有重载,因此无法继承const重载。

虽然C ++标准库已经使用一些有用的重载扩展了继承的C库,但const尚未添加free重载。

从未考虑过这样的过载,或者认为没有必要足以保证其添加到标准中。我没有遇到任何公开提出的这样的补充建议 - 虽然我没有读过所有的建议,也没有参加任何委员会会议或研讨会,所以我不能否认存在的可能性。这样的文件。

要解决缺少这种过载的问题,你确实可以使用const_cast。在这种情况下,它是完全安全的。