Насколько я знаю, для обеих векторных объявлений:
//TYPE 1
std::vector<cls> vec; //cls is user defined datatype(A class)
Память для вектора выделяется в стеке, а память содержимого в векторе выделяется в куче.
Это верно и для нижеследующей декларации (исправьте меня, если я ошибаюсь):
//TYPE 2
std::vector<cls*> vec; //cls is user defined datatype(A class)
Теперь, когда вектор в типе 1 выходит из области видимости, память освобождается для сохраненных в нем объектов.
Но что происходит в типе 2, если я вставляю элементы, как показано ниже (при условии, что у меня есть надлежащий перегруженный конструктор), а затем вектор выходит за пределы области видимости:
vec.push_back(new cls(5));
Я явно попробовал очистить вызов, но деструктор не был вызван. Будет ли автоматически освобождаться память и вызываться деструкторы. Если нет, то как это достичь.
Также, где выделена память для вектора, а также содержимое, если я объявляю вектор как:
std::vector<cls*> *vec = new std::vector<cls*>;