From dea533a53c3c63da32cb7bd84cd606c5b58e65b6 Mon Sep 17 00:00:00 2001 From: Sergey Lisitsyn Date: Thu, 16 Jun 2016 23:06:51 +0300 Subject: [PATCH] Add wrapper function to capture pointers This resolves memory leaks in generated examples. The function is to be deleted once we finish our API transition. --- examples/meta/generator/targets/cpp.json | 4 ++-- src/shogun/base/some.h | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/examples/meta/generator/targets/cpp.json b/examples/meta/generator/targets/cpp.json index 6bd08241372..f5e02d9d458 100644 --- a/examples/meta/generator/targets/cpp.json +++ b/examples/meta/generator/targets/cpp.json @@ -10,9 +10,9 @@ "Comment": "//$comment\n", "Init": { "Construct": "auto $name = some($arguments)", - "Copy": "auto $name = $expr" + "Copy": "auto $name = wrap($expr)" }, - "Assign": "$name = $expr", + "Assign": "$name = wrap($expr)", "Type": { "RealFeatures": "DenseFeatures", "StringCharFeatures": "CStringFeatures", diff --git a/src/shogun/base/some.h b/src/shogun/base/some.h index ef0e3cb33d6..eb8094e4965 100644 --- a/src/shogun/base/some.h +++ b/src/shogun/base/some.h @@ -124,6 +124,24 @@ namespace shogun return Some::from_raw(ptr); } + template + inline T wrap(const T& value) + { + return value; + } + + template + inline Some wrap(T* ptr) + { + return Some::from_raw(ptr); + } + + template + inline Some wrap(const Some& other) + { + return other; + } + }; #endif /* HAVE_CXX11 */