diff options
Diffstat (limited to 'xsde/cxx/hybrid/default-value.cxx')
-rw-r--r-- | xsde/cxx/hybrid/default-value.cxx | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/xsde/cxx/hybrid/default-value.cxx b/xsde/cxx/hybrid/default-value.cxx index a255c92..58a5507 100644 --- a/xsde/cxx/hybrid/default-value.cxx +++ b/xsde/cxx/hybrid/default-value.cxx @@ -499,7 +499,29 @@ namespace CXX member_ = "tmp."; else { - os << "tmp = new " << fq_name (t) << ";"; + String tn (fq_name (t)); + + if (!custom_alloc) + os << "tmp = new " << tn << ";"; + else + { + os << "tmp = static_cast< " << tn << "* > (" << endl + << "::xsde::cxx::alloc (sizeof (" << tn << ")));"; + + if (exceptions) + os << "::xsde::cxx::alloc_guard tmpg (tmp);"; + else + os << endl + << "if (tmp)" << endl; + + os << "new (tmp) " << fq_name (t) << ";"; + + if (exceptions) + os << "tmpg.release ();"; + else + os << endl; + + } if (!exceptions) { |