I think the assignment operator as shown will create a memory leak (or leaks).
You should check whether the object being overwritten already has valid
data, and if so, then deletethe existing arrays before creating new ones. Something like this ?
Another possible solution would be, since you're already assigning NULL to the pointers, to make sure the pointers are valid before deleting them.
I'm not sure if this would work for you since I don't know why you're calling the destructor for the same object twice. Perhaps if you posted some more code we could give you better advice.
The code for allocation and deallocation seems to be alright and it may not be the culprit for memory leak (if any).
But I don't understand your destructor is called twice though the object is constructed once. (Even if your class is a derived and base class's destructor is virtual, the number of calls to the constructor and destructor would match).
Only thing I suspect that there could be a dangling pointer problem in your code, ie, there are a couple of pointers pointing to same IFrame object and one deletes/deallocates the object without latter's knowledge of it. When the other pointer attempts to delete the same already-dead object it could lead the program to crash with a memory error.
Since you are nullifying the m_yvalues pointer after its deallocation, any additional deletes on the same nullified pointer would not harm either, but other part of the object destruction (second time) could be a problem.
With the above posted seemingly error-free code, the problem could not be identified however I would suggest you to check the code again with a probing look.
I would run the code with only a few object allocation of IFrame and trace the construction and destruction of the object in a debugging mode, so that it could lead to the segment where it is crashing.
Check it out and post your findings here. That could give us some hints to suggest/help you.