> Hi, > > first thing, in your code, you should return *this in the operator= (and > check if &a equals 'this'), which, I assume, you just > forgot. Yes, this code is just supposed to demonstrate the problem. > > 3: second = pointer ? *pointer : A(); > > @3: The compiler creates a anonymous, automatic object for class A on > compile-time and copies members from *pointer via its copy-constructor > into it (setting d=0!). Then, the operator= gets called for second with > the temporary object as an argument (hence, copying d=0 into second). Yes, running gdb made clear that something like this is happening, and I am willing to accept that this is according to the spec ;-) > > Try the attached code, which'll make it clearer, I presume... > > Apparently, the copy-constructor in cChannel needs explanation... In sections.c:143, the code intends to copy the object, but the object is not copied, resulting in a bogus channel returned by cFilter::Channel(), and this is a bug in VDR. I think that because of the possible implicit invocation of a copy constructor as seen in the example and in real code, a copy constructor should really be a copy constructor and equivalent to operator=. Otherwise you will run into bugs like above. (See http://braincore.blogspot.com/2005/06/koding-big-four.html http://grammarian.homelinux.net/%7Empyne/weblog/tutorial/c%2B%2B-tidbits.html for two KDE hackers' comments on providing copy constructors.) Marcel