how to allocate class without gc?

Daniel Kozak via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Jan 26 01:32:06 PST 2016


V Tue, 26 Jan 2016 05:47:42 +0000
Igor via Digitalmars-d-learn <digitalmars-d-learn at puremagic.com>
napsáno:

> On Tuesday, 26 January 2016 at 05:11:54 UTC, Mike Parker wrote:
> > On Tuesday, 26 January 2016 at 01:09:50 UTC, Igor wrote:  
> >> Is there any examples that shows how to properly allocate an 
> >> object of a class type with the new allocators and then 
> >> release it when desired?  
> >
> > Allocate a block of memory big enough to hold an instance of 
> > your class using whichever allocator you need, then instantiate 
> > a class instance with std.conv.emplace.
> >
> > http://p0nce.github.io/d-idioms/#Placement-new-with-emplace  
> 
> I created a class using this example. But my code is now failing. 
> It seems one can't just replace new with this and expect it to 
> work?
> 
> What is happening is some fields(strings) are not retaining their 
> value.
> 
> ubyte[__traits(classInstanceSize, App)] buffer;
> auto app = cast(App)emplace!App(buffer[]);
> //auto app = new App();
> 
> Basically the comment is the original. When I finally call 
> createWindow, it fails because the string representing the name 
> inside App is null... Which doesn't happen when I use new.
> 
> Should it work as expected(which it isn't) or do I have to also 
> emplace all the fields and such so they are not for some reason 
> released?
> 
Can you try it with GC.disable()?



More information about the Digitalmars-d-learn mailing list