Quote:But the point is that ~App only gets called at the termination of the whole program, not run-time.
Exactly. That's the whole point, though your statement is incorrect. "Run-time" is "program time" and "termination of the whole program" should include destruction of the App.
If you don't need to change the vertex buffer (assuming your grid is static), then you only need one vertex/index buffer for the entire duration of the program. You just render it multiple times. When the App destructor is called when the program terminates, the memory gets released.
If you do need to change the contents of the vertex buffer and don't need to change the size of the vertex buffer, don't create a new buffer, just lock it, fill it and unlock it.