Re: Allocating Heap/GC Storage upon Default Construction of RC Containers

2016-09-22 Thread Andrei Alexandrescu via Digitalmars-d-learn

On 9/21/16 8:49 AM, Nordlöw wrote:

Is there any way to make a default constructor of a struct container
allocate/initialize an internal pointer?

I need this in a container with RC behaviour similar to

struct Container
{
this()// this is currently forbidden:
{
_rcStore = emplace(cast(RCStore*)malloc(RCStore.size), null, 0);
}

private:
static struct RCStore
{
T* store;
size_t refCount;
}
RCStore* _rcStore;
}

If I can't modify default construction in containers such as `Container`
it is gonna behave in the same confusing way as empty AA's do for
(novel) D developers. Namely that the assignment of uninitialized AA's
has copy semantics and non-empty AA's have reference semantics.

I believe Andralex has spoken about this being a problem that should be
fixed if possible.


Sadly, not currently. I realize this makes certain designs more 
difficult. -- Andrei




Allocating Heap/GC Storage upon Default Construction of RC Containers

2016-09-21 Thread Nordlöw via Digitalmars-d-learn
Is there any way to make a default constructor of a struct 
container allocate/initialize an internal pointer?


I need this in a container with RC behaviour similar to

struct Container
{
this()// this is currently forbidden:
{
_rcStore = emplace(cast(RCStore*)malloc(RCStore.size), 
null, 0);

}

private:
static struct RCStore
{
T* store;
size_t refCount;
}
RCStore* _rcStore;
}

If I can't modify default construction in containers such as 
`Container` it is gonna behave in the same confusing way as empty 
AA's do for (novel) D developers. Namely that the assignment of 
uninitialized AA's has copy semantics and non-empty AA's have 
reference semantics.


I believe Andralex has spoken about this being a problem that 
should be fixed if possible.