Difference between revisions of "Calypso/TipsAndTricks"
(cppNew and cppDelete) |
(→Constructing C++ classes or structs on malloc'd memory) |
||
Line 1: | Line 1: | ||
== Constructing C++ classes or structs on malloc'd memory == | == 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 | + | 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 all the time, which is pointless additional work and not always possible. |
Calypso provides a small runtime library which contains some common utility functions, such as <code>cppNew</code> and <code>cppDelete</code> to bypass the GC while constructing C++ class/struct objects: | Calypso provides a small runtime library which contains some common utility functions, such as <code>cppNew</code> and <code>cppDelete</code> to bypass the GC while constructing C++ class/struct objects: |
Revision as of 16:36, 27 June 2016
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 all the time, 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