Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module test;
- import std.stdio;
- import std.conv;
- import std.c.stdlib;
- T construct(T, U...)(U args) if (is(T == class))
- {
- enum sizeT = __traits(classInstanceSize, T);
- void[] buffer = malloc(sizeT)[0 .. sizeT];
- return emplace!T(buffer, args);
- }
- void destroy(T)(T obj) if (is(T == class))
- {
- delete obj;
- free(cast(void*)obj);
- }
- class A
- {
- private:
- string msg;
- public:
- this(string msg)
- {
- this.msg = msg;
- }
- ~this()
- {
- writeln(msg);
- }
- }
- void main()
- {
- auto a = construct!A("bye!");
- scope(exit) destroy(a);
- writeln("hello!");
- }
- /*
- * Output:
- *
- C:\Programming\D\my_stuff\SDC\test>dmd test.d
- C:\Programming\D\my_stuff\SDC\test>test
- hello!
- bye!
- C:\Programming\D\my_stuff\SDC\test>
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement