Using OpenGL it is possible to load textures, buffer arrays, compiled shaders and more to the video memory. When a C++ program exits, heap memory that was allocated by it is cleaned. What happens to the stuff allocated on the video memory? Will memory leak beyond program's scope?
Your question was answered on SO:
Basically the answer is when your program exits, the memory should be cleared, so you will not have leaks.
You can test this by opening/closing multiple instances of your program without freeing the resources and verifying that your video memory usage stays the same.
However, as also mentioned in the link, you should of course get into the habit of freeing resources when they are no longer needed.