Я пытаюсь использовать оператор new
для создания экземпляра определенного класса, а не для ключевого слова new
.
Я пытаюсь создать своего рода "factory" для абстрактного класса.
Мне кажется, что это невозможно, но позволяет дважды проверить!
Этот код компилируется, но основной код рассматривает его как класс Test
(а не TestImpl
)
class Test
{
public:
virtual int testCall() { return 0; };
static void* operator new(std::size_t);
};
class TestImpl : public Test
{
virtual int testCall() override
{
return i;
}
int i = 15;
};
void* Test::operator new(size_t sz)
{
return ::new TestImpl();
}
void main()
{
Test * t = new Test(); // Call the new operator, correctly
int i = test->testCall(); // i == 0 and not 15
}