[C++] Перегрузка new и delete в производном классе
Всем привет. Возник один, возможно глупый, вопрос: можно ли перегрузить операторы new и delete именно в производном классе? Если да, то как это работает?
Приведенный ниже код корректно выполняется (gcc)
#include <iostream>
#include <cstdlib>
class Base
{
public:
Base ()
{
std::cout << "base ctor" << std::endl;
}
virtual ~Base ()
{
std::cout << "base dtor" << std::endl;
}
};
class Derived: public Base
{
public:
Derived ()
{
std::cout << "derived ctor" << std::endl;
}
~Derived ()
{
std::cout << "derived dtor" << std::endl;
}
void* operator new (size_t size)
{
std::cout << "new" << std::endl;
return std::malloc(size);
}
void operator delete (void *p)
{
std::cout << "delete" << std::endl;
std::free(p);
}
};
int main (int argc, char* argv[])
{
Base *b = new Derived;
delete b;
}