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

Function Overloading for the standard library functions in C++

本文关键字:函数 重载 库函数 标准 C++      更新时间:2023-10-16

我有一个自由函数作为类的一部分。在类的构造函数中,我正在执行一些malloc操作。所以在destructor中,我试图释放内存。但是VS10编译器抱怨

free(pointer); 

与我类的自由函数的签名不匹配。

所以问题是在一个类中,如果我们实现了与标准库函数同名的方法。如何呼叫一个而不是另一个。

问候,

您必须使用scope运算符来获得free函数的正确作用域:

::free(pointer);

::放在开头告诉编译器在全局作用域中查找free函数,而不是在与类最接近的作用域中。

您应该限定对函数的调用:

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

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

#include <cstdio>还将freemalloc放入std命名空间中,因此std::freestd::malloc也将工作。

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