函数C ++中标准库函数的重载

时间:2012-02-03 08:27:11

标签: c++ overloading

我有一个免费的功能作为课程的一部分。在类的构造函数中,我正在进行一些malloc操作。所以在destructor我试图释放那段记忆。但VS10编译器抱怨

free(pointer); 

与我班级的自由功能的签名不符。

所以问题是在一个类中,如果我们实现了与标准库函数名称相同的方法。如何打电话给另一个。

此致

2 个答案:

答案 0 :(得分:7)

您必须使用范围运算符来获取free函数的正确范围:

::free(pointer);

在开头有::告诉编译器在全局范围内查找free函数,而不是在您的类中最近的范围。

答案 1 :(得分:4)

您应该限制对该功能的调用:

void YourClass::free(args) {
  ::free(your_member);
}

这将获取全局命名空间中的free函数,而不是您的类。

#include <cstdio>也会将freemalloc放入std命名空间,因此std::freestd::malloc也会有用。

(还应考虑使用new / delete,以及智能指针。)