Pimpl copying
Peter Kümmel
syntheticpp at gmx.net
Fri Jul 14 13:21:33 BST 2006
Clarence Dang wrote:
> On Friday 14 July 2006 17:13, Peter Kümmel wrote:
>> Clarence Dang wrote:
>>> On Friday 14 July 2006 07:05, Peter Kümmel wrote:
>>>> +KTempDir& KTempDir::operator=(const KTempDir& rhs)
>>>> +{
>>> BTW, in general (but not this case), you need:
>>>
>>> if (this == &rhs)
>>> return *this;
>> But I don't understand why not in this case?
>
> class KTempDir::Private
> {
> public:
> int _error;
> QString _tmpName;
> bool _exists;
> bool _autoDelete;
> };
>
> In this case, if this == &rhs, you would be assigning int's, QString's and
> bool's to themselves - fairly harmless. But just imagine code like this:
>
> kpPenBrush &kpPenBrush::operator= (const kpPenBrush &rhs) const
> {
> d->ref--;
> if (d->ref == 0)
> delete d; <-- danger
>
> d = rhs.d; <-- if this == &rhs, rhs.d may have been deleted!
> d->ref++;
> }
>
>
I see, it was not wrong only harmless.
More information about the kde-core-devel
mailing list