Reference

ACE_Dumpable_Ptr(3)

A smart pointer stored in the in-memory object database ACE_ODB. The pointee (if any) is deleted when reassigned.

NAME

ACE_Dumpable_Ptr - A smart pointer stored in the in-memory object database ACE_ODB. The pointee (if any) is deleted when reassigned.

SYNOPSIS

#include <ace/Dump.h>
class ACE_Dumpable_Ptr
{
  public:
    ACE_Dumpable_Ptr (const ACE_Dumpable *dumper = 0);
    const ACE_Dumpable *operator->() const;
    void operator= (const ACE_Dumpable *dumper) const;
  private:
    const ACE_Dumpable *dumper_;
};

DESCRIPTION

A prototype mechanism that allow all ACE objects to be registered with a central in-memory "database" that can dump the state of all live ACE objects (e.g., from within a debugger).

To turn on this feature simply compile with -DACE_NDEBUG

There are several interesting aspects to this design:

1. It uses the External Polymorphism pattern to avoid having to
derive all ACE classes from a common base class that has virtual
methods (this is crucial to avoid unnecessary overhead). In
addition, there is no additional space added to ACE objects
(this is crucial to maintain binary layout compatibility).

2. This mechanism can be conditionally compiled in order to
completely disable this feature entirely. Moreover, by
using macros there are relatively few changes to ACE code.

3. This mechanism copes with single-inheritance hierarchies of
dumpable classes. In such cases we typically want only one
dump, corresponding to the most derived instance. Thanks to
Christian Millour ([email protected]) for illustrating how to do
this. Note, however, that this scheme doesn't generalize to
work with multiple-inheritance or virtual base classes.

Future work includes:

1. Using a dynamic object table rather than a static table

2. Adding support to allow particular classes of objects to
be selectively dumped.

PUBLIC MEMBERS

ACE_Dumpable_Ptr (const ACE_Dumpable *dumper = 0);

const ACE_Dumpable *operator->() const;

void operator= (const ACE_Dumpable *dumper) const;

PRIVATE MEMBERS

const ACE_Dumpable *dumper_;

"Real" pointer to the underlying abstract base class pointer that does the real work.

AUTHOR

Doug Schmidt

LIBRARY

ace