The list (just like any other well-written container class) cleans up after itself. Nothing more, nothing less.
In other words, any memory allocated by the list (using new) will be freed again (using delete)
Anything you do is your responsibility.
In your example, all you give the list is a pointer. How should it know whether that pointer was new'ed? It might point to something on the stack, and so it shouldn't be deleted.
And more importantly, it might point to something you don't actually want destroyed yet! You might get rid of the list, yes, but still want to use the elements it contained. Hard to do that if the list automatically deletes everything it touches.
So as always, the rule is that you delete the memory you allocate. And you assume that any third-party code (including the standard library) does the same.
Edit: Of course, in your example, there's no need to use new at all. You could just populate the list like this:
for(DWORD d = 0; d < m_dwNumProcessors; d++) { MagnusSubMain_List.push_back(Magnus_SubMain()); // <- no calls to 'new' at all}
And then, since you haven't actually new'ed anything, you don't need to delete anything when the list is destroyed either.
[Edited by - Spoonbender on May 25, 2007 8:35:48 PM]