If you are wanting to have a dynamic array why bother with pointers, even managed/smart pointers. Use what C++ provides, a std::vector. You get a lot of the array semantics, including operator[], and no need to worry about how the memory is managed "under the hood."