Yes, that's a leak and yes, you can (should) delete with a simple delete list[i];
A rule of thumb could be that for every new in your code there should be a delete (this is not true for smart pointers though).
I think the question was whether or not he can still delete it from the vector - which is the case, so, in that part of the code no memory leak is caused.
it's technically not a leak until the list variable falls out of scope
(so if your chunk of code were enclosed by braces and included no other code, I would call it a leak)
otoh, given your OP code, if the list variable falls out of scope and you haven't copied its entries elsewhere and you haven't called delete on all the entries, then you have a memory leak
edit: a leak has occurred iff you can no longer call delete on the address
None that I am aware of, so if C++0x can be used, vector<unique_ptr> is preferable.
Although, since the unique_ptr constructor is explicit, you can't write up_vec.push_back(new int);, but that's only a minor inconvenience.