Calypso/TipsAndTricks

From D Wiki
Revision as of 16:36, 27 June 2016 by Syniurge (talk | contribs) (cppNew and cppDelete)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Constructing C++ classes or structs on malloc'd memory

When a C++ library expects to be granted ownership on a piece of memory, the allocation shouldn't be done by the GC unless you keep a reference to the allocated memory at all times, which is pointless additional work and not always possible.

Calypso provides a small runtime library which contains some common utility functions, such as cppNew and cppDelete to bypass the GC while constructing C++ class/struct objects:

import cpp.memory; // cppNew and cppDelete
import (C++) std.unique_ptr;

auto testClass = cppNew!MyCppClass(); // malloc then ctor call
unique_ptr!MyCppClass owner;
owner.reset(testClass);

// testClass will be free'd by the owner's dtor