|
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