diff --git a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs index 07155233..4d27e619 100644 --- a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs +++ b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs @@ -1933,20 +1933,11 @@ namespace CppSharp.Generators.CSharp private void GenerateClassConstructor(Method method, Class @class) { - var @params = GenerateFunctionParamsMarshal(method.Parameters, method); - WriteLine("{0} = Marshal.AllocHGlobal({1});", Helpers.InstanceIdentifier, @class.Layout.Size); if (!method.IsDefaultConstructor || @class.HasNonTrivialDefaultConstructor) - { - Write("Internal.{0}({1}", GetFunctionNativeIdentifier(method), - Helpers.InstanceIdentifier); - if (@params.Any()) - Write(", "); - GenerateFunctionParams(@params); - WriteLine(");"); - } + GenerateInternalFunctionCall(method); GenerateVTableClassSetupCall(@class); } @@ -2182,12 +2173,6 @@ namespace CppSharp.Generators.CSharp public CSharpMarshalContext Context; } - public void GenerateFunctionParams(List @params) - { - var names = @params.Select(param => param.Name).ToList(); - Write(string.Join(", ", names)); - } - public List GenerateFunctionParamsMarshal(IEnumerable @params, Function function = null) { diff --git a/tests/Basic/Basic.h b/tests/Basic/Basic.h index ffb4b2f7..b0fa57df 100644 --- a/tests/Basic/Basic.h +++ b/tests/Basic/Basic.h @@ -47,6 +47,8 @@ struct DLL_API Bar Bar* returnPointerToValueType(); }; +DLL_API Bar::Item operator |(Bar::Item left, Bar::Item right); + struct DLL_API Bar2 : public Bar { // Conversion operators @@ -234,4 +236,11 @@ struct DLL_API TestDelegates DelegateInGlobalNamespace B; }; -DLL_API Bar::Item operator |(Bar::Item left, Bar::Item right); +// Tests memory leaks in constructors +// C#: Marshal.FreeHGlobal(arg0); +struct DLL_API TestMemoryLeaks +{ + TestMemoryLeaks(const char* name) {} +}; + +