Boost logo

Boost Users :

Subject: Re: [Boost-users] [Interprocess] shared_ptr in a non-throwing mode
From: Ion Gaztañaga (igaztanaga_at_[hidden])
Date: 2011-04-09 04:41:11


El 06/04/2011 13:19, Pietro Versari escribió:
> Hi Ion (and everyone else),
>
> I'm a newbye and I have only one simple question:
> how can I construct a shared_ptr in a non-throwing mode?
>
> This example throw if there is enough space for MyType but isn't
> enough for my_shared_ptr:
>
> typedef managed_shared_ptr<MyType,managed_shared_memory>::type
> my_shared_ptr;
> my_shared_ptr sh_ptr = make_managed_shared_ptr(
> segment.construct<MyType>("object to share", std::nothrow)(), segment);

Reviewing again the code, it is not a bug. make_managed_shared_ptr
creates a shared ptr from the object but it must allocate new memory for
the reference count. So it can throw. What is missing is a new
make_managed_shared_ptr() that also is nothrow. I will add it for Boost
1.47:

my_shared_ptr sh_ptr = make_managed_shared_ptr
  ( segment.construct<MyType>("object to share", std::nothrow)()
  , segment
  , std::nothrow);

Best,

Ion


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net