Using delete

There are two syntactic variants for the delete operator: one for single objects and the other for arrays of objects. The following code fragment shows how these differ:

void main()
{
    // Allocate a user-defined object, UDObject, and an object
    //  of type double on the free store using the
    //  new operator.
    UDType *UDObject = new UDType;
    double *dObject = new double;
    ...
    // Delete the two objects.
    delete UDObject;
    delete dObject; 
    ...
    // Allocate an array of user-defined objects on the
    // free store using the new operator.
    UDType (*UDArr)[7] = new UDType[5][7];
    ...
    // Use the array syntax to delete the array of objects.
    delete [] UDArr;
}

These two cases produce undefined results: using the array form of delete (delete [ ]) on an object and using the nonarray form of delete on an array.