Difference between revisions of "Calypso/TipsAndTricks"

From D Wiki
Jump to: navigation, search
(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 at all times, which is pointless additional work and not always possible.
+
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