Advertisement
Guest User

Untitled

a guest
Jun 20th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
D 0.80 KB | None | 0 0
  1. module test;
  2.  
  3. import std.stdio;
  4. import std.conv;
  5. import std.c.stdlib;
  6.  
  7. T construct(T, U...)(U args) if (is(T == class))
  8. {
  9.     enum sizeT = __traits(classInstanceSize, T);
  10.     void[] buffer = malloc(sizeT)[0 .. sizeT];
  11.     return emplace!T(buffer, args);
  12. }
  13.  
  14. void destroy(T)(T obj) if (is(T == class))
  15. {
  16.     delete obj;
  17.     free(cast(void*)obj);
  18. }
  19.  
  20. class A
  21. {
  22.     private:
  23.     string msg;
  24.    
  25.     public:
  26.     this(string msg)
  27.     {
  28.         this.msg = msg;
  29.     }
  30.    
  31.     ~this()
  32.     {
  33.         writeln(msg);
  34.     }
  35. }
  36.  
  37. void main()
  38. {
  39.     auto a = construct!A("bye!");
  40.     scope(exit) destroy(a);
  41.     writeln("hello!");
  42. }
  43.  
  44. /*
  45.  * Output:
  46.  *
  47. C:\Programming\D\my_stuff\SDC\test>dmd test.d
  48.  
  49. C:\Programming\D\my_stuff\SDC\test>test
  50. hello!
  51. bye!
  52.  
  53. C:\Programming\D\my_stuff\SDC\test>
  54. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement