Are D classes always garbage collected?
Ali Çehreli
acehreli at yahoo.com
Thu Dec 29 13:12:54 PST 2011
On 12/21/2011 10:20 PM, Froglegs wrote:
>
>>> Which returned me a nice fat null pointer.. wth? Perhaps that should
>>> be a compile time error if you aren't supposed to use classes..
>>
>> Strange... I'm not sure what the deal is with that overload. I meant
>> the last one on the page (that takes a void[]).
>
>
> Hum I've tried the array version but I believe it contains a rather
> serious bug...
>
> T emplace(T, Args...)(void[] chunk, Args args) if (is(T == class))
> {
> enforce(chunk.length >= __traits(classInstanceSize, T),
> new ConvException("emplace: chunk size too small"));
> ...
>
> This fails whenever the size is greater or equal to the amount of memory
> required :(
That bug has recently been fixed:
http://d.puremagic.com/issues/show_bug.cgi?id=6204
> Anyway I need the pointer version for what I was hoping to do, unless
> there is some way to convert a pointer into an array?
emplace() with classes is a little more involved compared to structs; I
think because the type of the class variable need not be the same type
as the instance.
> Is there any way to do something like this..
>
> void* pData = some_c_function();
> void [] fakeArray = pData, size;
Yes, as Andrew Wiley has shown:
void[] fakeArray = pData[0..size];
Ali
P.S. I have all of this in my Turkish book but that chapter hasn't been
translated to English yet:
http://ddili.org/ders/d/bellek_yonetimi.html
More information about the Digitalmars-d-learn
mailing list