Не нужно делать то, что мешает сделать тебе правильно. Чтобы не переопределять конструктор копирования и оператор присваивания для чистых указателей, лучше всего использовать std::shared_ptr. И затачивать класс под единичный конкретный объект тоже не стоит, чем отличается TestHero от Actor? Если только поведением и определенными спрайтами, то для конкретного объекта поведение можно реализовать через скрипты, вызывая из стека и использовать в Update для любого объекта, а спрайты объекту можно присвоить и за пределами его конструктора.
Сообщение отредактировал rozen777 - Четверг, 23 Января 2014, 03:30
Можно, если количество объектов известно на момент компиляции и неизменно или выделять память про запас, но это налагает некоторые ограничения. В случае если количество объектов будет изменятся в ходе выполнения, то самая простая и лучшая реализация будет с использованием контейнеров таких как std::vector<>.
ЦитатаSaitei ()
как создать сразу по 20 штук?
Очень просто, посмотри на примеры выше. Создание и удаление объектов реализуешь ты сам, но в ходе программы это можно автоматизировать в ответ на какое-то действие. Если все же что-то не понимаешь, советую почитать книги, только там можно найти ответы и понять самому как все работает, а потом уже практика.
class A : public Entity { virtual void Update() { // реализация поведения объекта класса A. std::cout << "Calling update A class." << std::endl; } };
class B : public Entity { virtual void Update() { // реализация поведения объекта класса B. std::cout << "Calling update B class." << std::endl; } };
int main() { std::vector<Entity*> entity_mgr;
// Создаем нужные объекты. A *a = new A(); B *b = new B();
// Помещаем их в объектный менеджер. entity_mgr.push_back(a); entity_mgr.push_back(b);
// Представим что это игровой цикл, начинаем перебирать объекты. for( auto &i:entity_mgr ) { i->Update(); // Вызываем Update для всех объектов. delete i; } }