A memory leak occurs when a program fails to release memory which has been allocated to store an object, even though that object is no longer needed.
In .NET, memory leaks should not (in theory at least) occur because, when there are no longer any references to an object, the garbage collector will eventually destroy the object and deallocate the memory it used.
However, this is not the case with unmanaged C++ code where objects created dynamically (using 'new') need to be deallocated manually (using 'delete') and, if you forget, a memory leak will occur.