Pytanie jest właśnie tego typu, czy w związku z tym są jakieś przeciwskazania (lub praktyczne zastosowania) niekorzystania z tej klasy, gdy potrzebujemy tablicę dynamiczną? Tzn. czy jest jakiś powód, by zrobić:
double* tablica = new double[size];
zamiast:
vector<double> tablica(size);
Generalnie ja znam 2, takie powody:
- W danym projekcie (z jakiś względów technicznych) nie możesz użyć stla/boosta/eastla/etc.
- Twój szef/project manager jest idiotą i wymusza nieużywanie stla/boosta/eastla/etc.
Poza tymi przypadkami wszędzie gdzie możesz zamiast ręcznie zarządzanej, dynamicznej tablicy używaj std::vectora, eastl::vector, czy jakiegoś odpowiednika tego kontenera z innej libki. Podobnie zamiast statycznej tablicy lepiej używaj std::array, czy boost::array.
A drugie pytanie brzmi: jeśli C++ ma taki vector to jak się ma porównanie takiego C# lub Javy, które mają zarządzaną pamięć? Czy vector nie jest rozwiązaniem analogicznym?
Bo moim zdaniem obecnie jedyną wadą C++ (poza kilkoma niedociągnięciami - jak np. dość nieczytelne korzystanie ze wskaźników na metody, które są składnikami klasy, która przechowuje metodę :P) jest brak biblioteki standardowej związanej z tworzeniem okienek :).
std::vector to szablon klasy - kontener. W sensie Twojego pytania std::vector nie jest rozwiązaniem analogicznym do rozwiązań z C#, czy Javy.
A odnośnie wad C++....to radzę Ci się wstrzymać z opinią do czasu, gdy zaczniesz uczyć się idiomów rozwiązujących "specyficzne" dla tego języka problemy, czy też spędzisz x-czasu na rozkminianiu np. reference collapsing. Parafrazując wypowiedź S. Kisielewskiego "C++ to język, w którym bohatersko pokonuje się trudności nieznane w żadnym innym języku programowania".