The first question you must ask is: "Why does everyone manages memory manually while there are dozens of garbage collecting mechanisms for C++?"
Usually, we manage memory by hand because automatic managing won't be sufficient.
So, we manage memory by hand to avoid automatic managing problems. Examples are the implicit overhead and some implementations that arbitrarily pauses your program to clean up.
Specialization is an even common reason for manual memory management, specialized memory pools and management implementations are way too common on game development. Usually to avoid wasting memory (duplicates), reloads (having to load an asset prematurely purged due to lack of references), runtime overhead and possible pauses. It also affects the determinism of your software, not an issue on most cases.
But managing memory manually means keeping track of everything you have allocated, and the only reference you can have is a pointer. A pointer is nothing more than an address to the start of a memory block. If the memory in the said block has been used, and won't be used again, you can simply free it so other programs (or your own) can use it. The argument against manual memory management that you can create bad code and mess up exists, but I don't like to assume bad practices.
About your code, if you create an identical, it'll probably work just the same way.
So, I must assume you're referring to static arrays?