我使用一个返回动态分配的
const char*
的extern C函数。
我想使用unique_ptr<const char, decltype(std::free)>
来管理它。
但是没有std::free(const void*)
重载,所以我得到了invalid conversion from 'const void*' to 'void*'
,必须使用const_cast<char*>()
。
这只是标准库的缺陷,还是背后有其他原因?
delete
const
指针是可以的。 - Fred Larsonconst T*
并不总是指向一个const T
的指针。它也可能意味着对可变的T
的 "const
视图"。 当你使用malloc
分配内存时,返回的内存总是被视为可变的(否则,你无法做任何事情)。这意味着,如果你打算释放它(因为它意味着是用malloc
分配的,否则就是未定义行为),那么将const T*
上的const
去掉是完全安全的。 - KABoissonneault