[ Goran Rakić @ 12.12.2005. 23:19 ] @
Imam sablon koji implementira dinamicki niz (primer sa vezbi na faksu). Sada ja hocu da mogu da uradim ovo: Code: Niz<double> s1; s1[0] = 3.23; Niz<int> s2(s1); s2[2] = 4; Stoga sam napravio konstruktor sa parametrom: Code: template <class U> Niz(const Niz<U>& n) : _duzina(n._duzina), _obezbedjeno(n._duzina), _elementi( n._duzina>0 ? new T[n._duzina] : 0) { for( unsigned i=0; i<_duzina; i++ ) _elementi[i] = (T) n._elementi[i]; } I posto su _duzina i _elementi privatni, uveo da je Niz<int> prijatelj svih raspisa sablona Niz. I to sada radi. Medjutim problem je kada su tipovi isti: Code: Niz<int> q1; q1[0] = 3; Niz<int> q2(q1); cout << "q1: " << q1 << endl; cout << "q2: " << q2 << endl; Tada uopste ne bude pozvan ovaj moj konstruktor, vec nesto sto stvarno predstavi elemente q1 kao elemente q2 ali pri tom izgleda da ne pravi kopiju. Tako da pri destrukciji naletim na problem. Izlaz: Code: Konstruktor bez parametara q1: [1:3] q2: [1:3] a.out(21157) malloc: *** error for object 0x500180: double free Prikazio sam ceo kod u prilogu. Meni nije jasno gde je uopste nestao poziv konstruktora sa parametrom??? Ok, kada je U == T raspis sablona izgleda nije ispravan, ali na koji nacin on pravi objekat p2, odnosno q2 tako da njegova duzina i elementi budu oni iz p1, odnosno q1... I naravno, kako treba napisati kod da ovo funkcionise? |