home | |||
links |
|
||
developer's mag main page article part 1 part 2 part 3 part 4 part 5 part 6 part 7 part 8 part 9 |
7 - Coordinating ObjectsCreating a new object means adding itself to this list:cpaRadioButton::cpaRadioButton(int id, int width, int height, const char *caption, int groupId) : CRadioButton(id,width,height,caption), m_tag(-1), m_groupId(groupId) { // add entry to list - simply place at beginning, // and move curr. pointer to us m_nextObject =s_firstObject; s_firstObject=this; }Creation is fast because we can add our object to the start of the list. Deletion is slower, since we have to walk the list to find our object pointer first, and then splice the list to bypass ourselves: cpaRadioButton::~cpaRadioButton(void) { // remove itself from chain - walk along // list, looking for us, then swap out cpaRadioButton *ptr=s_firstObject; if ( this==ptr ) // we are first entry? s_firstObject=m_nextObject; // remove our link else // unlink from elsewhere { while ( NULL!=ptr ) { if ( this == ptr->m_nextObject ) { ptr->m_nextObject=m_nextObject; break; } ptr=ptr->m_nextObject; } } }Walking a sequential list can appear extremely time-consuming, but before rewriting this code to use a more efficient algorithm, remember that there are not likely to be many cpaRadioButtons at any given time in your program, so you may be optimizing code that won't benefit significantly from it. Previous Section Next Section |
||
Copyright © 2001-2006 ebmDevMag.com - Legal Notice |