Перегрузка функций для стандартных функций библиотеки в C ++ - PullRequest
3 голосов
/ 03 февраля 2012

У меня есть свободная функция как часть класса.В конструкторе для класса я делаю несколько malloc операций.Так что в destructor я пытаюсь освободить эту память.Но компилятор VS10 жалуется, что

free(pointer); 

не соответствует сигнатуре свободной функции моего класса.

Так что вопрос в классе, в котором мы реализовали бы методы, которыеимена как у стандартных библиотечных функций.Как назвать один над другим.

С уважением,

Ответы [ 2 ]

7 голосов
/ 03 февраля 2012

Вы должны использовать оператор области видимости, чтобы получить правильную область действия функции free:

::free(pointer);

Наличие :: в начале говорит компилятору искать функцию free вглобальная область, а не ближайшая область, которой является ваш класс.

4 голосов
/ 03 февраля 2012

Вы должны квалифицировать свой вызов функции:

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

Это подберет функцию free в глобальном пространстве имен, а не в вашем классе.

#include <cstdio> такжепомещает free и malloc в пространство имен std, поэтому std::free и std::malloc также будут работать.

(Следует также рассмотреть использование new / deleteкак умные указатели.)

...