Я очень новичок в C ++ и был сбит с толку следующим примером:
#include <iostream>
#include <cstddef>
#include <cstdlib>
class Test{
public:
enum test_type{ test1 = 0, test2, test3};
void *operator new(size_t sz, test_type t){
return malloc(sz);
}
};
class SomeClass: public Test{
public:
SomeClass(int a): a(a){}
int a;
};
int main(int argc, char ** argv){
SomeClass *sc = new(Test::test1) SomeClass(10);
std::cout << sc->a << std::endl;
}
DEMO
Я прочитал правила поиска имен на странице cpp-reference , но не нашел объяснения, почему оператор new, определенный в базовом классе, был найден и использован для производного класса (который может содержать дополнительный член).
Это обычный способ объявить operator new
в базовом классе, а затем использовать его для выделения памяти для производных классов (идея была взята из какого-то проекта с открытым исходным кодом, написанного на C ++)?