ScopedPointer and Introjucer


#1

Why does the Introjucer do this:

//header
ScopedPointer<ToggleButton> toggleButton;
//

//==============================================================================
MyComponent::MyComponent ()
{
    addAndMakeVisible (toggleButton = new ToggleButton ("new toggle button"));
    toggleButton->addListener (this);

    //[UserPreSize]
    //[/UserPreSize]

    setSize (600, 400);

    //[Constructor] You can add your own custom stuff here..
    //[/Constructor]
}

MyComponent::~MyComponent()
{
    //[Destructor_pre]. You can add your own custom destruction code here..
    //[/Destructor_pre]

    toggleButton = nullptr;


    //[Destructor]. You can add your own custom destruction code here..
    //[/Destructor]
}

Because the toggleButton is a scopedPointer, why would we need to put ‘toggleButton = nullptr’, it will go out of scoped and get deleted.
Just wondering as i’m using the Introjucer now a lot while converting our Juce 1.50 based project, just wondering if i’m not making wrong assumptions.


#2

Yes - in this case (and most cases) it’d work just the same without needing to clear the pointer, of course.

The reason I added the explicit “= nullptr” statements is that the old code-generator used to call “deleteAndZero” there, so I needed to provide the same behaviour in case people had put code in their [Destructor] user-code section following the destruction of the child comps which would fail if the child comps still existed at that point.


#3

ok, thanks Jules. Already thought it would be something along those lines. Just checking if i wasn’t missing something.