Я пытаюсь улучшить свои навыки на С++, написав образец рендеринга программ. Он берет объекты, состоящие из точек в трехмерном пространстве, и сопоставляет их с окном просмотра 2d и рисует круги различного размера для каждой точки зрения. Что лучше:
class World{
vector<ObjectBaseClass> object_list;
public:
void generate(){
object_list.clear();
object_list.push_back(DerivedClass1());
object_list.push_back(DerivedClass2());
или...
class World{
vector<ObjectBaseClass*> object_list;
public:
void generate(){
object_list.clear();
object_list.push_back(new DerivedClass1());
object_list.push_back(new DerivedClass2());
?? Будет ли использовать указатели во втором примере для создания новых объектов, которые победят точку использования векторов, потому что векторы автоматически вызывают деструкторы DerivedClass в первом примере, но не во втором? Являются ли указатели на новые объекты необходимыми при использовании векторов, потому что они сами обрабатывают управление памятью, пока вы используете их методы доступа? Теперь скажем, что у меня есть другой метод в мире:
void drawfrom(Viewport& view){
for (unsigned int i=0;i<object_list.size();++i){
object_list.at(i).draw(view);
}
}
При вызове this будет выполняться метод draw для каждого объекта в списке мира. Скажем, я хочу, чтобы производные классы могли иметь свои собственные версии draw(). Будет ли список иметь указатели тогда, чтобы использовать селектор метода (- > )?