我使用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*>()
。
这仅仅是标准库不完善还是背后还有其他东西?
答案 0 :(得分:2)
std::free
继承自C标准库。 C没有重载,因此无法继承const
重载。
虽然C ++标准库已经使用一些有用的重载扩展了继承的C库,但const
尚未添加free
重载。
从未考虑过这样的过载,或者认为没有必要足以保证其添加到标准中。我没有遇到任何公开提出的这样的补充建议 - 虽然我没有读过所有的建议,也没有参加任何委员会会议或研讨会,所以我不能否认存在的可能性。这样的文件。
要解决缺少这种过载的问题,你确实可以使用const_cast
。在这种情况下,它是完全安全的。