Listing 2: Using DynObj.

// Foo.hh
class Bar;
class Foo {
    public:
        Foo();
        void doSomething() const;
        void getBar(DynObj<Bar>&);
    private:
        DynObj<Bar> _bar;
};
// Foo.cc
#include "Foo.hh"
#include "Bar.hh"
Foo::Foo(): _bar(new Bar) {}
void Foo::doSomething() const { _bar().constMethod(); }
void Foo::getBar(DynObj<Bar>& bar) {_bar.giveAway(bar);}
// Bar.hh
class Bar {
    public:
        Bar() {}
        void constMethod() const {}
};
// main.cc
int main() {
    Foo foo; 
    foo.doSomething();
    DynObj<Bar> bar;
    foo.getBar(bar);
    bar().constMethod();
}