Wednesday 15 September 2010

c++ - How to do perform a dynamic_cast with a unique_ptr? -



c++ - How to do perform a dynamic_cast with a unique_ptr? -

i have class hierarchy follows:

class basesession : public boost::enable_shared_from_this<basesession> class derivedsessiona : public basesession class derivedsessionb : public basesession

within derived class functions, regularly phone call functions this:

func(boost::dynamic_pointer_cast<derivedsessiona>(shared_from_this()));

since working shared_ptr manage sessions, working fine. recently, discovered utilize of shared_ptr not optimal case. because these sessions singleton objects maintain 1 socket per client. if socket reconnected, session copies used become zombies.

as workaround, started passing shared_ptr reference rather copies. solved zombie problem.

ideally, felt should using unique_ptr store session , pass references other functions. opened whole can of worms.

how cast base of operations class unique_ptr object derived class unique_ptr object? unique_ptr version of next line?

func(boost::dynamic_pointer_cast<derivedsessiona>(shared_from_this()));

i want 1 re-create of session object, else should reference.

unless want transfer ownership of std::unique_ptr<t>, function should take pointer or reference t.

so signature of func should func(derivedsessiona*)

and phone call may like:

std::unique_ptr<basesession> ptr; // initialize right value func(dynamic_cast<derivedsessiona*>(ptr.get()));

or seems phone call straight method in basesession:

func(dynamic_cast<derivedsessiona*>(this));

c++ boost smart-pointers unique-ptr dynamic-cast

No comments:

Post a Comment