> 
> **Possible Duplicate:**  
> 
> [How does delete[] know it's an array? (C++)](https://stackoverflow.com/questions/703691/how-does-delete-know-its-an-array-c)  
> 
> [How does delete[] “know” the size of the operand array?](https://stackoverflow.com/questions/197675/how-does-delete-know-the-size-of-the-operand-array)
> 
> 
> 

suppose we have the following class

```
class Data
{
public:
    Data() : i(new int) { *i = 0; }
    ~Data() { delete i; }

private:
    int *i;
};

```

now we create array of 100 elements of type Data

```
Data* dataArray = new Data[100];

```

we know that operator new will call Data constructor for the 100 objects because it knows how many objects created, Now let's delete this array, if we say `delete dataArray` the destructor for first object only will be called even we know that the memory for the 100 objects we be released - will cause memory leak - and that because they allocated as one block, but if we say `delete[] dataArray` the destructor for the 100 objects will be called, but this is a dynmaic memory and i didn't specify how many object in there and as i know there is no overhead with the array to know how many objects in it, so how the runtime environment knows the number of objects to destruct before it free that memory?