我在下面的代码中遇到编译错误。我正在编写一个用C ++释放内存的函数
template<class T> inline void kill(T& v)
{
free(v);
v=0;
}
我正在调用此函数来释放Class对象,有时会释放一个字符串并低于错误。
错误1'void free(void *)':无法将参数1从'const char *'转换为'void *'
错误2'void free(void *)':无法将参数1从'Cstring'转换为'void *'
如果我更改下面的代码,则没有错误。
template<class T> inline void kill(T& v)
{
free((void*)v);
v=0;
}
还有其他更好的解决方案吗?
答案 0 :(得分:0)
如果您提到了正在使用的编译器,那就太好了。
在Visual Studio 2008中,我尝试编译你的代码(第一个例子),它正在运行。
答案是,如果编译器不允许,你可以做什么。
您必须仅使用第二个示例代码。
但通常编译器应该允许这样做。
答案 1 :(得分:0)
free
应该在你从malloc获得的指针上使用 。 T&
是参考。除非那是对指针的引用,否则你的代码没有任何意义。对指针的引用很少见,但C对malloc
返回的指针的C ++引用甚至更少。您的代码非常可疑并且非常容易出错。