10.09.2013 Views

Dictaat SOPX3 - Harry Broeders

Dictaat SOPX3 - Harry Broeders

Dictaat SOPX3 - Harry Broeders

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!