On 15-07-2012 15:43, Alexandr Druzhinin wrote:
Hello,

I need something like that -
http://digitalmars.com/techtips/class_objects.html, but more portable. I
saw it sometime ago, but now can not find anything.
Could someone help me.

This is how you do it in modern D:

import core.stdc.stdlib, std.conv;

class A {}

void main()
{
    // allocate and initialize
    auto size = __traits(classInstanceSize, A);
    auto mem = malloc(size)[0 .. size];
    auto a = emplace!A(mem);

    // a is now an instance of A in the libc heap.

    // finalize and deallocate
    clear(a);
    free(mem.ptr); // or free(cast(void*)a);
}

clear() calls the finalizer on the object you give it. In the case of A, there is no finalizer, so it doesn't matter. It would matter if you had something like:

class A
{
    private void* resource;

    ~this()
    {
        freeResource(resource);
    }
}

--
Alex Rønne Petersen
a...@lycus.org
http://lycus.org


Reply via email to