sad*_*raf 6 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*>().
这仅仅是标准库不完善还是背后还有其他东西?
std::free继承自C标准库。C 没有重载,因此const重载无法被继承。
虽然 C++ 标准库使用一些有用的重载扩展了继承的 C 库,但const尚未为free.
要么从未考虑过这种超载,要么认为没有必要将其添加到标准中。我还没有遇到过任何公开的此类补充提案——尽管我没有阅读过所有提案,也没有参加过任何委员会会议或研讨会,所以我不能否认存在这样一个提案的可能性。文档。
要解决缺乏这种重载的问题,您确实可以使用const_cast. 在这种情况下,它是完全安全的。