Boost logo

Boost Users :

Subject: Re: [Boost-users] Is there a way to delay the initialisation of a member in a C++ base class until the ctor of the derived class is executed?
From: Matthieu Brucher (matthieu.brucher_at_[hidden])
Date: 2009-03-25 04:38:15


Perhaps simply:

class base
{
public:
    base(size_t size):size(size), p_array(new unsigned char[size]){}
private:
    size_t size;
    boost::shared_ptr<unsigned char> p_array;
};

And then:

class derived:public base
{
public:
    derived(size_t array_size):base(array_size)
    {
    }
};

Do not declare size and p_array again, they will be different than the
ones in the base class...

Matthieu

2009/3/25 tom tan <ttan_at_[hidden]>:
> Here's the scenario: I want define a base class that allocate some
> buffer once for all derived classes, while the size of the buffer varies
> among different derived classes. I could achieve it in this way:
>
> class base
> {
> public:
>     base():size(), p_array(0){}
> private:
>     size_t size;
>     boost::shared_ptr<unsigned char> p_array;
>
> };
>
> in the derived class:
>
> class derived
> {
> public:
>     derived(size_t array_size):size(array_size)
>     {
>          p_array.reset(new unsigned char[size]);
>     }
> private:
>     size_t size;
>     boost::shared_ptr<unsigned char> p_array;
>
> };
>
> However, in order to simplify the design of the derived class, I really
> want to put this line:
>
> p_array.reset(new unsigned char[size]);
>
> to somewhere in the base class, thus writing it only once. Is there any
> C++ design pattern could achieve it? Thanks
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>

-- 
Information System Engineer, Ph.D.
Website: http://matthieu-brucher.developpez.com/
Blogs: http://matt.eifelle.com and http://blog.developpez.com/?blog=92
LinkedIn: http://www.linkedin.com/in/matthieubrucher

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