For a typical graph I'd use shared_ptrs. But here the choice whether a MapChunk will live on or will be deleted does not depend on how many other MapChunks still refer to it. Instead it just depends on whether its map data is all 0 or not.
nope, the graph doesn't require any smart pointers at all, c++98 things can be used