September 25, 2017 Re: Is it possible to avoid call to destructor for structs? | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Adrian Matoga | On Monday, 25 September 2017 at 08:39:26 UTC, Adrian Matoga wrote: > [...] > > You shouldn't store the pointer to barBuffer inside Foo. The language allows moving the structure around with a simple memcpy, so _bar is likely to point into garbage soon after it's assigned. Good point - but it's a mistake ;) 'Foo' is a class in the OP's code, so no problem. > Why don't you just return *cast(Bar*)barBuffer.ptr in bar()? Lazy construction > You could still emplace a Bar inside barBuffer in Foo's constructor, if needed. So you KNOW it's a class then...since structs can't have default ctors.. :P | |||
September 28, 2017 Re: Is it possible to avoid call to destructor for structs? | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Haridas | Here's a simple solution. Just make Bar a pointer and free it before it can be destructed!
import std.stdio;
struct Bar {
~this() {
writeln("~bar");
}
}
struct Foo {
Bar *bar;
this(int why_the_fuck_dont_structs_have_default_constructors) {
bar = new Bar;
}
~this() {
writeln("~foo");
import core.memory;
GC.free(bar);
}
}
| |||
September 28, 2017 Re: Is it possible to avoid call to destructor for structs? | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Haridas | Here's a simple solution. Just make Bar a pointer and free it before it can be destructed!
import std.stdio;
struct Bar {
~this() {
writeln("~bar");
}
}
struct Foo {
Bar *bar;
this(int why_the_fuck_dont_structs_have_default_constructors) {
bar = new Bar;
}
~this() {
writeln("~foo");
import core.memory;
GC.free(bar);
}
}
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply