|
Boost : |
Subject: Re: [boost] [Block Pointer] Update
From: Phil Bouchard (philippeb8_at_[hidden])
Date: 2016-03-11 08:02:25
On 03/11/2016 01:31 AM, Gavin Lambert wrote:
> On 11/03/2016 16:50, Phil Bouchard wrote:
>
> I don't really understand the proxy thing, but I sense possible trouble
> in a single API name apparently creating different behaviour depending
> on the first parameter type, especially when the remaining parameters
> appear to be forwarded constructor parameters. (What happens if you
> want to construct an object that takes a proxy as a parameter?)
The proxy ensures all sub allocations will be wiped out when it is
destructed, cyclic or not.
> Perhaps the first call should be to a method make_root_block and the
> second two to one called make_child_block, or something along those lines?
I am fixing the pointer again and now the proxy will have to be fully
explicit:
struct list {
public:
list() : root(x) {}
void clear() {
root.reset();
}
void insert() {
if(root.get() == 0) {
root = make_block<node>(x, x);
} else {
root->next = make_block<node>(x, x);
root->next->prior = root;
root = root->next;
}
}
~list()
{
}
private:
block_proxy x;
block_ptr<node> root;
};
But I guess I could define a new type like:
struct list {
public:
[...]
private:
block_root_ptr<node> root;
};
Where block_root_ptr could be something like:
template <typename T>
struct block_root_ptr : private block_proxy, public block_ptr<T>
{
block_root_ptr() : block_proxy(),
block_ptr<T>(static_cast<block_proxy &>(*this)) {}
};
Subsequent make_*() would follow the respective syntax. Thanks for your
input...!
Regards,
-Phil
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk