From 881530793c92c891477cae3d52679133c71618e7 Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Mon, 19 Aug 2019 01:20:53 +0300 Subject: [PATCH] Destroy returned by value std::strings Signed-off-by: Dimitar Dobrev --- src/Generator/Types/Std/Stdlib.cs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/Generator/Types/Std/Stdlib.cs b/src/Generator/Types/Std/Stdlib.cs index 33ed3f58..c563c7c1 100644 --- a/src/Generator/Types/Std/Stdlib.cs +++ b/src/Generator/Types/Std/Stdlib.cs @@ -378,13 +378,24 @@ namespace CppSharp.Types.Std var typePrinter = new CSharpTypePrinter(ctx.Context); string qualifiedBasicString = GetQualifiedBasicString(basicString); string varBasicString = $"__basicStringRet{ctx.ParameterIndex}"; - bool usePointer = type.IsAddress() || ctx.MarshalKind == MarshalKind.NativeField; + bool usePointer = type.IsAddress() || ctx.MarshalKind == MarshalKind.NativeField || + ctx.MarshalKind == MarshalKind.ReturnVariableArray; ctx.Before.WriteLine($@"var {varBasicString} = { basicString.Visit(typePrinter)}.{Helpers.CreateInstanceIdentifier}({ (usePointer ? string.Empty : $"new {typePrinter.IntPtrType}(&")}{ ctx.ReturnVarName}{(usePointer ? string.Empty : ")")});"); - ctx.Return.Write($@"{qualifiedBasicString}Extensions.{data.Name}({ - varBasicString})"); + string @string = $"{qualifiedBasicString}Extensions.{data.Name}({varBasicString})"; + if (usePointer) + { + ctx.Return.Write(@string); + } + else + { + string retString = $"{Generator.GeneratedIdentifier("retString")}{ctx.ParameterIndex}"; + ctx.Before.WriteLine($"var {retString} = {@string};"); + ctx.Before.WriteLine($"{varBasicString}.Dispose();"); + ctx.Return.Write(retString); + } } private static string GetQualifiedBasicString(ClassTemplateSpecialization basicString)