$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Jeff Flinn (TriumphSprint2000_at_[hidden])
Date: 2006-02-13 11:02:54
Ion Gaztañaga wrote:
...
> I meant that with a class that wants to contain a pure-RAII object
> without dynamic allocation/optional, it has to initialize the object
> in
> the member constructor list. Imagine that depending constructor
> arguments and the constructed other member, you want to open,
> open_or_create or create a RAII object. Since you have to initialize
> raii in the initializer list, Iyou can only use a constructor type.
> And
> for example, to open raii I need 3 arguments, and to create raii
> resource I need 4.
>
> class Holder
> {
>    RAII  raii;
>    public:
>    Holder(/*some conditions*/)
>       : raii(/*Create or open depending arguments,
>                and other temporary results*/)
>    {}
> };
>
> If I have two phase construction (error handling omitted):
>
> class Holder
> {
>    TwoPhase  twophase;
>    public:
>    Holder(/*some conditions*/)
>       : raii()
>    {
>      /*Depending on passed conditions, open or create*/
>      if()
>         twophase.open(/*3 arguments*/)
>      else
>         twophase.create(/*4 arguments*/)
>      //If we throw, the twophase destructor will free resources
>    }
> };
Looking at this from the RAII perspective, I'd say, hmm, what if I have a 
constructor that opens if the resource is already available, otherwise will 
ask the OS for a new one. IIRC, that's what Microsoft does for named IPC 
objects.
This simplifies the usage of the library from the user's perpective.
Jeff Flinn