У меня есть абстрактный класс, определяющий чисто виртуальный метод в c ++:
class Base
{
Base();
~Base();
virtual bool Test() = 0;
};
Я подклассил это с рядом других классов (которые предоставляют реализацию для Test ()), которые я буду называть A, B, C и т. Д. Теперь я хочу создать массив любого из этих типы, использующие этот базовый класс:
int main(int argc, char* argv[])
{
int size = 0;
Base* bases = new Base[10];
bases[size++] = new A();
bases[size++] = new B();
for (int i = 0; i < size; i++)
{
Base* base = bases[i];
base->Test();
}
}
(Извините за любые ошибки, которые я мог совершить, я пишу это на лету, чтобы привести простой пример).
Проблема в том, что я не могу создать экземпляр массива, так как это потребует создания экземпляра класса Base (что он не может сделать, так как он абстрактный). Однако, не делая этого, он не выделил память, необходимую для назначения индексам массива, и, таким образом, обеспечивает ошибку сегментации при попытке доступа к этой памяти. У меня сложилось впечатление, что не рекомендуется смешивать новое и удалять с помощью malloc и free.
Возможно, я запутался в том, как это следует использовать, и я должен пытаться использовать шаблоны или какой-то другой механизм для этого, но, надеюсь, я предоставил достаточно информации, чтобы проиллюстрировать, что я пытаюсь сделать.
Так каков наилучший способ сделать это и как бы я обошел эту проблему выделения памяти абстрактному классу?
Спасибо,
Dan