Old problem with performance
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Mon Feb 9 07:32:50 PST 2009
Rainer Deyke wrote:
> Andrei Alexandrescu wrote:
>> The slicing problem exists in spades in this example, or better put its
>> converse (your code will fire asserts when it shouldn't). The reason is
>> rather subtle, so please try the code out to edify yourself.
>
> You're referring to the automatically generated copy constructor in
> class 'avatar' which calls the copy constructor in class 'person',
> right? That's a bug in my silly untested example code, but it's not the
> slicing problem.
>
> Fix 1:
>
> class person {
> person(person const& org, bool allow_slicing = false) {
> assert(allow_slicing || typeid(org) == typeid(*this));
> }
> };
>
> class avatar : public person, public deity {
> avatar(avatar const& org, bool allow_slicing = false)
> : person(org, true)
> {
> }
> };
So the problem exists since you are explicitly addressing it.
> Fix 2:
>
> Trust the programmer to pay attention and remove the silly unnecessary
> assertion from class 'person'.
>
>
So the problem exists since you are trusting the programmer to avoid it.
Andrei
More information about the Digitalmars-d
mailing list