Dictaat SOPX3 - Harry Broeders
Dictaat SOPX3 - Harry Broeders
Dictaat SOPX3 - Harry Broeders
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
}<br />
std::swap(size, v.size);<br />
std::swap(data, v.data);<br />
Deze memberfunctie verwisselt de receiver met de als argument meegegeven Vector v. Daarbij is<br />
gebruik gemaakt van de standaard functie swap die als volgt gedefinieerd is in :<br />
template <br />
inline void swap (T& a, T& b) {<br />
T tmp(a);<br />
a=b;<br />
b=tmp;<br />
}<br />
De throw() achter de functie declaratie van Vector::swap zegt dat deze functie geen exception<br />
kan gooien. Uit de implementatie zal duidelijk zijn dat dit inderdaad zo is (er worden alleen twee int’s<br />
en twee int*’s verwisseld).<br />
De swap memberfunctie wordt gebruikt bij het implementeren van de operator=.<br />
Vector& Vector::operator=(const Vector& r) {<br />
Vector t(r);<br />
swap(t);<br />
return *this;<br />
}<br />
De operator= begint met het maken van een kopie van de als argument meegegeven Vector r.<br />
Tijdens het uitvoeren van de copy constructor kan uiteraard een bad_alloc exception optreden. Als<br />
dit gebeurt wordt de operator= meteen afgebroken (omdat de constructie van t niet gelukt is wordt<br />
de destructor van t niet aangeroepen). Als bij het maken van t geen exception optreedt wordt t (de<br />
kopie van r) verwisseld met de receiver. De nieuwe waarde van de receiver wordt dus gelijk aan r.<br />
Zoals we al hebben gezien kan tijdens Vector::swap geen exception optreden. Na het uitvoeren van<br />
het return statement wordt het object t verwijderd. Hierdoor wordt de oude waarde van de receiver<br />
opgeruimd. Bedenk dat t door de verwisseling de oude waarde van de receiver bevat! Waarschijnlijk<br />
moet je deze paragraaf een paar keer lezen om het helemaal te vatten. Het heeft niet voor niets 15 jaar<br />
geduurd voordat er iemand op dit geniale idee kwam.<br />
{<br />
}<br />
Vector v(10);<br />
for (int j(0); j