I'm having a little difficulty understanding the correct sequence of events that should happen when using the delete operator in C++. I've internalized that the proper way to use this is when a pointer is still referencing a pointee.  
In the example below - I copy the contents of the array into temp and then delete [] the old array my arrayPointer was pointing too. 
I then point the arrayPointer to the newly created array and set the no longer needed temp to nullptr. I want to make sure I'm not causing memory leaks by not deleting the temp pointer. Does this still need to happen? 
I ask because I've seen examples where we point to nullptr first then delete but that seems counterintuitive. Any guidance would be greatly appreciated. Thanks! 
    template <class T>
    void ValSet<T>::add(T elementToAdd){
        if(!this->contains(elementToAdd)){
            if(sizeOfArray == numOfElements){
                sizeOfArray *= 2;
                T* temp = new T[sizeOfArray];
                for (int i = 0; i < numOfElements; i++)
                    temp[i] = arrayPointer[i];
                delete [] arrayPointer;
                arrayPointer = temp;
                temp = nullptr;
            }
        numOfElements += 1;
        arrayPointer[numOfElements-1] = elementToAdd;
        }
      }
 
     
    