diff options
Diffstat (limited to 'libunwindstack/include/unwindstack/Maps.h')
-rw-r--r-- | libunwindstack/include/unwindstack/Maps.h | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/libunwindstack/include/unwindstack/Maps.h b/libunwindstack/include/unwindstack/Maps.h index 67fbed2..1784394 100644 --- a/libunwindstack/include/unwindstack/Maps.h +++ b/libunwindstack/include/unwindstack/Maps.h @@ -20,6 +20,7 @@ #include <sys/types.h> #include <unistd.h> +#include <memory> #include <string> #include <vector> @@ -37,8 +38,16 @@ static constexpr int MAPS_FLAGS_JIT_SYMFILE_MAP = 0x4000; class Maps { public: + virtual ~Maps() = default; + Maps() = default; - virtual ~Maps(); + + // Maps are not copyable but movable, because they own pointers to MapInfo + // objects. + Maps(const Maps&) = delete; + Maps& operator=(const Maps&) = delete; + Maps(Maps&&) = default; + Maps& operator=(Maps&&) = default; MapInfo* Find(uint64_t pc); @@ -51,11 +60,11 @@ class Maps { void Sort(); - typedef std::vector<MapInfo*>::iterator iterator; + typedef std::vector<std::unique_ptr<MapInfo>>::iterator iterator; iterator begin() { return maps_.begin(); } iterator end() { return maps_.end(); } - typedef std::vector<MapInfo*>::const_iterator const_iterator; + typedef std::vector<std::unique_ptr<MapInfo>>::const_iterator const_iterator; const_iterator begin() const { return maps_.begin(); } const_iterator end() const { return maps_.end(); } @@ -63,11 +72,11 @@ class Maps { MapInfo* Get(size_t index) { if (index >= maps_.size()) return nullptr; - return maps_[index]; + return maps_[index].get(); } protected: - std::vector<MapInfo*> maps_; + std::vector<std::unique_ptr<MapInfo>> maps_; }; class RemoteMaps : public Maps { @@ -90,14 +99,14 @@ class LocalMaps : public RemoteMaps { class LocalUpdatableMaps : public Maps { public: LocalUpdatableMaps() : Maps() {} - virtual ~LocalUpdatableMaps(); + virtual ~LocalUpdatableMaps() = default; bool Reparse(); const std::string GetMapsFile() const override; private: - std::vector<MapInfo*> saved_maps_; + std::vector<std::unique_ptr<MapInfo>> saved_maps_; }; class BufferMaps : public Maps { |