Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Is this code from sourcemaking.com bugged?

0 views
Skip to first unread message

paulde...@att.net

unread,
May 30, 2009, 5:36:11 PM5/30/09
to
I was a bit surprised to see this on sourcemaking.com because it
generally appears excellent. My opinion is that this code is faulty
because the destructor has not been made virtual in the base class
Stooge. Am I correct, or is there some reason a non-virtual
destructor is ok?

Thanks a lot,

Paul Epstein

Code is pasted below:

class Stooge
{
public:
// Factory Method
static Stooge *make_stooge(int choice);
virtual void slap_stick() = 0;
};

int main()
{
vector<Stooge*> roles;
int choice;
while (true)
{
cout << "Larry(1) Moe(2) Curly(3) Go(0): ";
cin >> choice;
if (choice == 0)
break;
roles.push_back(Stooge::make_stooge(choice));
}
for (int i = 0; i < roles.size(); i++)
roles[i]->slap_stick();
for (int i = 0; i < roles.size(); i++)
delete roles[i];
}

class Larry: public Stooge
{
public:
void slap_stick()
{
cout << "Larry: poke eyes\n";
}
};
class Moe: public Stooge
{
public:
void slap_stick()
{
cout << "Moe: slap head\n";
}
};
class Curly: public Stooge
{
public:
void slap_stick()
{
cout << "Curly: suffer abuse\n";
}
};

Stooge *Stooge::make_stooge(int choice)
{
if (choice == 1)
return new Larry;
else if (choice == 2)
return new Moe;
else
return new Curly;
}

Alf P. Steinbach

unread,
May 30, 2009, 6:23:05 PM5/30/09
to
* paulde...@att.net:

UB.

Cheers, & hth.,

- Alf


--
Due to hosting requirements I need visits to <url: http://alfps.izfree.com/>.
No ads, and there is some C++ stuff! :-) Just going there is good. Linking
to it is even better! Thanks in advance!

paulde...@att.net

unread,
May 30, 2009, 6:52:39 PM5/30/09
to
On May 31, 12:23 am, "Alf P. Steinbach" <al...@start.no> wrote:
> * pauldepst...@att.net:

Actually, I've spotted very many typos there since my posting so I
shouldn't have been surprised. But nevertheless, it's the best free
resource on C++ Design patterns that I've seen.

Paul Epstein

0 new messages