Pimpl copying
Peter Kümmel
syntheticpp at gmx.net
Fri Jul 14 17:28:41 BST 2006
André Wöbbeking wrote:
> On Friday 14 July 2006 16:42, Peter Kümmel wrote:
>> Peter Kümmel wrote:
>>> The problem is that KTempDirTest uses the Pimpl idiom, but does
>>> not define a copy ctor/operator, so all private data gets lost
>>> on copying, nor does it forbid copying.
>>>
>>> I fear kdelibs is full of this bug and think we should catch
>>> such constructs at compile time.
>>>
>>> Shouldn't we introduce a coding policy something like this:
>> I've solved the issue by this patch:
>>
>> SVN commit 562284 by kuemmel:
>>
>> macro for pimpl handling:
>> * consistent naming of the private implementation
>> * explicit copying, checked by the linker
>> * disable copying, checked at compile time
>> * const pimpl
>>
>>
>> M +1 -0 TODO
>> M +2 -2 kdecore/ktempdir.cpp
>> M +1 -2 kdecore/ktempdir.h
>> M +2 -2 kdecore/tests/ktempdirtest.cpp
>> M +62 -0 kdemacros.h.cmake
>
>> --- trunk/KDE/kdelibs/TODO #562283:562284
>> @@ -10,6 +10,7 @@
>> help prevent mistakes where developers forget to delete the
>> pointer. Maybe make use of
>> Qt4 helper macros?
>> (Frerich)
>> + Use KDE_PIMPL_EN(DIS)ABLE_COPY to avoid compiler generated copy
>> functions (Kümmel)
>>
>> - Move all utility functions away from KApplication. TBD: Make
>> KApplication a very thin wrapper around QApplication. Ideally,
>> KApplication should go --- trunk/KDE/kdelibs/kdecore/ktempdir.cpp
>> #562283:562284
>> @@ -53,7 +53,7 @@
>> #include <kdebug.h>
>> #include "kde_file.h"
>>
>> -class KTempDir::Private
>> +class KTempDir::KTempDirPrivate
>
> Many pimpls were just changed to (nested) Private.
>
Have the guide lines changed again?
http://lists.kde.org/?l=kde-core-devel&m=114322798807520&w=2
http://developer.kde.org/policies/librarypolicy.html
>> +
>> +#define KDE_PIMPL_BASE_MACRO(COPY_ACCESS,X) \
>> +COPY_ACCESS: \
>> + X(const X##&); \
>> + X##& operator=(const X##&); \
>> +private: \
>> + class X##Private; \
>> + X##Private * const d;
>> +
>> +#define KDE_PIMPL_ENABLE_COPY(X) KDE_PIMPL_BASE_MACRO(public, X)
>> +#define KDE_PIMPL_DISABLE_COPY(X) KDE_PIMPL_BASE_MACRO(private,X)
>
> Does't KDE_PIMPL_DISABLE_COPY lead to unresolved smybols linking error
> with MSVC (see "unresolved symbols from value.cpp/.h" on k-c-d from
> 20.01.2006)?
>
>
More information about the kde-core-devel
mailing list