How to use destroy and free.
H. S. Teoh
hsteoh at quickfur.ath.cx
Wed May 4 23:26:37 UTC 2022
On Wed, May 04, 2022 at 10:04:53PM +0000, forkit via Digitalmars-d-learn wrote:
> On Wednesday, 4 May 2022 at 21:55:18 UTC, H. S. Teoh wrote:
> > On Wed, May 04, 2022 at 09:46:50PM +0000, forkit via Digitalmars-d-learn
> > wrote: [...]
[...]
> > > To deny a programmer the option to release the memory that was GC
> > > allocated within a particular scope, to be release immediately
> > > after that scope exits, seems kinda cruel.
> > [...]
> >
> > scope ptr = GC.malloc(size);
> > scope(exit) GC.free(ptr);
> >
> > ... // use ptr however you like until end of scope
[...]
> that's cruel!
>
> I just want 'scope-based deallocation of GC allocated memory'.
>
> I just want to write one word for this to happen -> 'inscope'
-------
import std;
// Put this in some common module
auto scoped(T, Args...)(Args args) {
static struct Result {
private T* payload;
ref T get() { return *payload; }
alias get this;
~this() {
import core.memory : GC;
writeln("dtor");
GC.free(payload);
}
}
return Result(new T(args));
}
// Then you can use it in just a single line, as below
void main() {
struct MyType {
int blah, blahblah;
}
auto data = scoped!MyType(10, 20); // <--- like this
data.blah = 123; // use data as you like
// automatically frees on scope exit
}
-------
T
--
Тише едешь, дальше будешь.
More information about the Digitalmars-d-learn
mailing list