Witam! Ostatnio napisałem sobie taki skromny szablon klasy:
template <typename TYP>
class TArray
{
TYP* m_pTablica;
unsigned m_uRozmiar;
public:
TArray(unsigned uSize) : m_uRozmiar(uSize), m_pTablica(new TYP [m_uRozmiar]) { }
~TArray() { delete[] m_pTablica; }
TYP& operator[](unsigned uIndeks) { return m_pTablica[uIndeks]; }
};
Wszystko jest dobrze aż gdy skompiluje jeszcze taki kod:
TArray<int> ob(4);
ob[2] = 45;
cout << ob[2] << endl;
Wtedy wyskakuje wyjątek "bad_array_new_length". Gdy sprawdziłem w VS co wywołało błąd to okazało się że w instrukcji: new TYP[m_uRozmiar]; doszło do błędnej alokacji pamięci z wartością ujemną zamiast liczby 4.
Zatem zmieniłem kod konstruktora na:
TArray(unsigned uSize) : m_uRozmiar(uSize), m_pTablica(new TYP [uSize]) { }
// "new TYP[m_uRozmiar]" zostało zmienione na "new TYP [uSize]"
I teraz wszystko nagle działa!
Dlaczego została przekazana błędna wartość?
A może m_uRozmiar nie został zainicjalizowany , ale jak to się stało?