Seuraava esimerkki kuvannee muodostajan (rakentaja) ja hajottajan (hävittäjä) kutsujärjestystä:
/* CONORDER.CPP */
#include <stdio.h>
#include <string.h>
#include <conio.h>
#define RIVEJA 14
class cMalli {
int luku;
char nimi[10];
static int rivi; // Tulostusrivien laskuri
public:
cMalli(int i=0, char *s="?") {
luku = i; strcpy(nimi,s);
tulosta("Rakentaja");
}
~cMalli() { tulosta("Hävittäjä"); }
void tulosta(char *s="???") const {
rivi++;
if (rivi>RIVEJA) gotoxy(40,1+rivi-RIVEJA);
else gotoxy(1,1+rivi);
printf("%2d %-10s: %-10s %3d\n",rivi,s,nimi,luku);
}
void vaihda(int i) { luku = i; tulosta("Vaihto");}
};
int cMalli::rivi = 0; // ks. luokkamuuttujat
int main(void)
{
clrscr();
printf("--------------------------------------------------------\n");
// rivinro
cMalli m1(1,"m1"); // # 1
cMalli *p,*a;
cMalli t[3]={ // # 2-4
cMalli(10,"t[0]"),cMalli(11,"t[1]"),cMalli(12,"t[2]")
};
{
m1.tulosta("Onko muita"); // # 5
cMalli m2(2,"m2"); // # 6
m2.tulosta("Nyt on 2"); // # 7
{
cMalli m3(3,"m3"); // # 8
m3.tulosta("Nyt 3"); // # 9
p = new cMalli(4,"*p"); // #10
} // #11
} // #12
a = new cMalli[3]; // #13-15
delete p; // #16
a[1].tulosta("Dyn.taul."); // #17
for (int i=0; i<3; i++) a[i].vaihda( (i+1)*100 ); // #18-20
a[1].tulosta("Dyn.taul."); // #21
delete [] a; // #22-24
return 0;
} // #25-28
Alla on ohjelman tulostus. Riveihin viitataan ohjelmakoodin kommenteissa:
1 Rakentaja : m1 1 | 15 Rakentaja : ? 0 2 Rakentaja : t[0] 10 | 16 Hävittäjä : *p 4 3 Rakentaja : t[1] 11 | 17 Dyn.taul. : ? 0 4 Rakentaja : t[2] 12 | 18 Vaihto : ? 100 5 Onko muita: m1 1 | 19 Vaihto : ? 200 6 Rakentaja : m2 2 | 20 Vaihto : ? 300 7 Nyt on 2 : m2 2 | 21 Dyn.taul. : ? 200 8 Rakentaja : m3 3 | 22 Hävittäjä : ? 300 9 Nyt 3 : m3 3 | 23 Hävittäjä : ? 200 10 Rakentaja : *p 4 | 24 Hävittäjä : ? 100 11 Hävittäjä : m3 3 | 25 Hävittäjä : t[2] 12 12 Hävittäjä : m2 2 | 26 Hävittäjä : t[1] 11 13 Rakentaja : ? 0 | 27 Hävittäjä : t[0] 10 14 Rakentaja : ? 0 | 28 Hävittäjä : m1 1Mikäli a -taulukon tuhoamisessa ei olisi ollut taulukkomerkintää delete [] a;, ei a:n jokaista alkiota kohti olisi kutsuttu vastaavaa hajottajaa.