Указатель на вектор против вектора указателей против указателя на вектор указателей

Просто интересно, что вы думаете, является лучшей практикой в ​​отношении векторов в C ++.

Если у меня есть класс, содержащий переменную-член вектора. Когда должен быть объявлен этот вектор:

  1. переменная-член вектора «весь объект», содержащая значения, то есть vector my_vector;
  2. Указатель на вектор, то есть vector * my_vector ;
  3. Вектор указателей, т.е. vector my_vector;
  4. Указатель на вектор указателей, например vector * my_vector;

У меня есть конкретный пример в одном моих классов, где я в настоящее время объявил вектор как case 4, то есть vector * my_vector; где AnotherClass - это еще один из созданных мною классов.

Затем в списке инициализации моего конструктора я создаю вектор, используя new:

MyClass::MyClass()
: my_vector(new vector<AnotherClass*>())
{}

В моем деструкторе я делаю следующее:

MyClass::~MyClass()
{
  for (int i=my_vector->size(); i>0; i--)
  {
    delete my_vector->at(i-1);
  }
  delete my_vector;
}

Элементы векторов добавлены в один из методов моего класса. Я не могу заранее знать, сколько объектов будет добавлено к моему вектору. Это решается при выполнении кода на основе анализа xml-файла.

Является ли это хорошей практикой? Или вместо этого вектор должен быть объявлен как один из других случаев 1, 2 или 3?

Когда использовать какой случай?

Я знаю, что элементы вектора должны быть указателями, если они являются подклассами другого класса (полиморфизм ). Но следует ли использовать указатели в других случаях?

Большое спасибо !!

12
задан Lisa 13 April 2011 в 11:53
поделиться