diff --git a/modules/juce_core/misc/juce_StdFunctionCompat.cpp b/modules/juce_core/misc/juce_StdFunctionCompat.cpp index 70e3547149..1687201fcf 100644 --- a/modules/juce_core/misc/juce_StdFunctionCompat.cpp +++ b/modules/juce_core/misc/juce_StdFunctionCompat.cpp @@ -62,7 +62,7 @@ namespace FunctionTestsHelpers struct FunctionObject { - FunctionObject() {} + FunctionObject() = default; FunctionObject (const FunctionObject& other) { @@ -72,6 +72,26 @@ namespace FunctionTestsHelpers int operator()(int i) const { return bigData->sum() + i; } std::unique_ptr bigData { new BigData() }; + + JUCE_LEAK_DETECTOR (FunctionObject) + }; + + struct BigFunctionObject + { + BigFunctionObject() = default; + + BigFunctionObject (const BigFunctionObject& other) + { + bigData.reset (new BigData (*other.bigData)); + } + + int operator()(int i) const { return bigData->sum() + i; } + + std::unique_ptr bigData { new BigData() }; + + int stackUsage[32]; + + JUCE_LEAK_DETECTOR (BigFunctionObject) }; } @@ -95,13 +115,16 @@ public: std::function f2 (FunctionTestsHelpers::multiply); expectEquals (6.0, f2 (2.0, 3.0)); - } { beginTest ("Function objects"); + std::function f1 = FunctionTestsHelpers::FunctionObject(); expectEquals (f1 (5), FunctionTestsHelpers::BigData::bigDataSum + 5); + + std::function f2 { FunctionTestsHelpers::BigFunctionObject() }; + expectEquals (f2 (5), FunctionTestsHelpers::BigData::bigDataSum + 5); } { diff --git a/modules/juce_core/misc/juce_StdFunctionCompat.h b/modules/juce_core/misc/juce_StdFunctionCompat.h index 27d727bc6b..5406cd9239 100644 --- a/modules/juce_core/misc/juce_StdFunctionCompat.h +++ b/modules/juce_core/misc/juce_StdFunctionCompat.h @@ -192,11 +192,7 @@ namespace std { if (functorHolderHelper != nullptr) { - if (functorHolderHelper->getSize() > functorHolderStackSize) - delete[] reinterpret_cast (functorHolderHelper); - else - functorHolderHelper->~FunctorHolderBase(); - + functorHolderHelper->~FunctorHolderBase(); functorHolderHelper = nullptr; } }