I like leak detection, but I think inheritance is not so useful here,
because you can't simply add leak detection to a class 'on demand',
without compiling all following modules.

We already have some leak detection in tools/debug.hxx:
DBG_CTOR and DBG_DTOR.
Together with DBG_CHECKTHIS, you can also use it to check if your object
is still valid.

Advantage: No inheritance
(Small) Disadvantage: Manually put DBG_CTOR/DTOR in all ctors and dtors.

So maybe you would like to extend the things we already have in tools...

Malte.

Daniel Boelzle wrote:
> Hello,
> 
> I'd like to present/discuss a recent helper, called rtl::LeakGuard which
> helps to find leaking free store objects.  The helper works by embracing
> the CRTP (curiously recurring template pattern), e.g. you use it like
> 
> class MyClass : private rtl::LeakGuard<MyClass> {...};
> 
> This creates static informtation about created and destructed MyClass
> objects.
> In non-pro builds, the LeakGuard OSL_ASSERTs any undestroyed (leaking)
> objects while in product builds the LeakGuard class is just plain empty
> (and does not hurt performance).
> 
> The LeakGuard class has three modes:
> - LEAKGUARD_COUNT (default): just counts the number of instances
> - LEAKGUARD_STORE_ADDRESSES: stores all addresses of created objects
> [- LEAKGUARD_NONE: empty LeakGuard class for product builds]
> 
> LEAKGUARD_STORE_ADDRESSES has the advantage to iterate over all
> instances using your debugger, but the disadvantage of using more memory.
> 
> You can explicitly switch the mode in your code, e.g.
> 
> class MyClass : private rtl::LeakGuard<MyClass,
>                                        rtl::LEAKGUARD_STORE_ADDRESSES>
> 
> or override the default mode placing a
> 
> CDEFS += -DRTL_LEAKGUARD_DEFAULT_MODE=LEAKGUARD_STORE_ADDRESSES
> 
> in your makefile.pmk (or similar).
> 
> If you are interested in checking the current (static) object count of a
> LeakGuard-ed class, you can do so by calling the (static) member function:
> 
> static bool checkObjectCount( ::std::size_t nExpected = 0 );
> 
> which asserts if the observed object count is not the expected.
> 
> You can have a look at the implementation on cws presfixes10 (tag
> cws_src680_presfixes10):
> sal/inc/rtl/leakguard.hxx
> 
> I have added the header to sal, because I think such a guard can be
> useful for lots of code, also in very basic libraries.  IMO, there is
> currently the problem, that headers of sal/cppu/etc will get a
> (published into the concrete) part of the SDK.  So I have tagged all of
> leakguard's inner definitions as @internal, thus nobody ought to rely on
> it staying compatible.  We ought to expand the concept of
> public/published API to the fields of C/C++/Java API, do we?
> leakguard.hxx depends on e.g. osl/diagnose.h, so I can not put it into a
> lower module than sal.
> 
> So what do you think?  Comments, please.
> 
> regards,
> -Daniel
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to