[vdr] Re: Problem with cChannel's copy constructor
marcel.wiesweg at gmx.de
Thu Aug 4 21:40:26 CEST 2005
> first thing, in your code, you should return *this in the operator= (and
> check if &a equals 'this'), which, I assume, you just
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.
for two KDE hackers' comments on providing copy constructors.)
More information about the vdr