For your questions: yes, it is valid to let a class delete itself, BUT if you do, make sure the class DOES NOT access any of its members.
The reason you don't get an access violation after deleting the object is because the functions doesn't exist in the class. Only the class's member data does. If you try to access the member data outside or in a function in the class after it's destructed, it's very likely you'll get an access violation.
Avoid doing that. A good practice is to set a pointer to NULL when it's freed. This will make sure windows throws an access violation if you try to use it.
As explained, new allocates memory for your object, and delete returns that memory to the OS. Freed memory doesn't mean you can't use it, but you'll likely get an access violation doing so. But sometimes, you won't. In any case, you should avoid that.
Does that explain your questions?