diff options
author | Yuri Gorshenin <ygorshenin@chromium.org> | 2015-03-11 18:48:58 +0300 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 02:38:48 +0300 |
commit | 8fdbf7ad9730aeaf152f8956e76c495368954b9d (patch) | |
tree | 21563aebe2bba51e51b7fe3546a47d0c6c4bb5f8 /map | |
parent | 1ab260d29a389dda2daebc258ae29f97c19bd6c8 (diff) |
[bookmark] Fixed memory leaks in UserMarkCopy.
Diffstat (limited to 'map')
-rw-r--r-- | map/bookmark.cpp | 4 | ||||
-rw-r--r-- | map/bookmark.hpp | 2 | ||||
-rw-r--r-- | map/pin_click_manager.cpp | 7 | ||||
-rw-r--r-- | map/pin_click_manager.hpp | 6 | ||||
-rw-r--r-- | map/user_mark.hpp | 19 |
5 files changed, 18 insertions, 20 deletions
diff --git a/map/bookmark.cpp b/map/bookmark.cpp index edda1f5cad..c0813075fa 100644 --- a/map/bookmark.cpp +++ b/map/bookmark.cpp @@ -26,9 +26,9 @@ #include "../std/algorithm.hpp" #include "../std/auto_ptr.hpp" -UserMarkCopy * Bookmark::Copy() const +unique_ptr<UserMarkCopy> Bookmark::Copy() const { - return new UserMarkCopy(this, false); + return unique_ptr<UserMarkCopy>(new UserMarkCopy(this, false)); } graphics::DisplayList * Bookmark::GetDisplayList(UserMarkDLCache * cache) const diff --git a/map/bookmark.hpp b/map/bookmark.hpp index fde150be50..2d3dd5d4e5 100644 --- a/map/bookmark.hpp +++ b/map/bookmark.hpp @@ -108,7 +108,7 @@ public: double GetScale() const { return m_data.GetScale(); } void SetScale(double scale) { m_data.SetScale(scale); } - virtual UserMarkCopy * Copy() const; + unique_ptr<UserMarkCopy> Copy() const override; virtual graphics::DisplayList * GetDisplayList(UserMarkDLCache * cache) const; virtual double GetAnimScaleFactor() const; diff --git a/map/pin_click_manager.cpp b/map/pin_click_manager.cpp index f95d844ead..54597b12e9 100644 --- a/map/pin_click_manager.cpp +++ b/map/pin_click_manager.cpp @@ -28,7 +28,7 @@ void PinClickManager::Hide() void PinClickManager::OnShowMark(UserMark const * mark) { if (mark != NULL) - OnActivateUserMark(mark->Copy()); + m_userMarkListener(mark->Copy()); SetBalloonVisible(mark != NULL); } @@ -57,11 +57,6 @@ void PinClickManager::ClearListeners() m_dismissListener = TDismissListener(); } -void PinClickManager::OnActivateUserMark(UserMarkCopy * mark) -{ - m_userMarkListener(mark); -} - void PinClickManager::OnDismiss() { // Can be called before the listeners will be attached (clearing on activity start). diff --git a/map/pin_click_manager.hpp b/map/pin_click_manager.hpp index 8f9a5d0e66..ae990f1cfc 100644 --- a/map/pin_click_manager.hpp +++ b/map/pin_click_manager.hpp @@ -5,8 +5,9 @@ #include "../geometry/point2d.hpp" -#include "../std/shared_ptr.hpp" #include "../std/function.hpp" +#include "../std/shared_ptr.hpp" +#include "../std/unique_ptr.hpp" class Framework; @@ -19,7 +20,6 @@ class PinClickManager { Framework & m_f; - void OnActivateUserMark(UserMarkCopy * mark); void OnDismiss(); void SetBalloonVisible(bool isVisible); @@ -41,7 +41,7 @@ private: /// @name Platform dependent listeners to show special activities. //@{ // You must delete UserMarkCopy obtained by this callback - typedef function<void (UserMarkCopy *)> TUserMarkListener; + typedef function<void (unique_ptr<UserMarkCopy>)> TUserMarkListener; TUserMarkListener m_userMarkListener; typedef function<void (void)> TDismissListener; TDismissListener m_dismissListener; diff --git a/map/user_mark.hpp b/map/user_mark.hpp index 5bf34c0db3..0218bcb019 100644 --- a/map/user_mark.hpp +++ b/map/user_mark.hpp @@ -6,8 +6,9 @@ #include "../search/result.hpp" -#include "../std/string.hpp" #include "../std/noncopyable.hpp" +#include "../std/string.hpp" +#include "../std/unique_ptr.hpp" class UserMarkContainer; class PaintOverlayEvent; @@ -40,7 +41,7 @@ public: void GetLatLon(double & lat, double & lon) const; virtual bool IsCustomDrawable() const { return false;} virtual Type GetMarkType() const = 0; - virtual UserMarkCopy * Copy() const = 0; + virtual unique_ptr<UserMarkCopy> Copy() const = 0; protected: m2::PointD m_ptOrg; @@ -95,9 +96,10 @@ public: string const & GetID() const { return m_id; } void SetID(string const & id) { m_id = id; } - virtual UserMarkCopy * Copy() const + unique_ptr<UserMarkCopy> Copy() const override { - return new UserMarkCopy(new ApiMarkPoint(m_name, m_id, m_ptOrg, m_container)); + return unique_ptr<UserMarkCopy>( + new UserMarkCopy(new ApiMarkPoint(m_name, m_id, m_ptOrg, m_container))); } private: @@ -129,9 +131,10 @@ public: feature::FeatureMetadata const & GetMetadata() const { return m_metadata; } void SetMetadata(feature::FeatureMetadata const & metadata) { m_metadata = metadata; } - virtual UserMarkCopy * Copy() const + unique_ptr<UserMarkCopy> Copy() const override { - return new UserMarkCopy(new SearchMarkPoint(m_info, m_ptOrg, m_container)); + return unique_ptr<UserMarkCopy>( + new UserMarkCopy(new SearchMarkPoint(m_info, m_ptOrg, m_container))); } protected: @@ -146,9 +149,9 @@ public: : SearchMarkPoint(m2::PointD(0.0, 0.0), container) {} UserMark::Type GetMarkType() const { return POI; } - virtual UserMarkCopy * Copy() const + unique_ptr<UserMarkCopy> Copy() const override { - return new UserMarkCopy(this, false); + return unique_ptr<UserMarkCopy>(new UserMarkCopy(this, false)); } void SetPtOrg(m2::PointD const & ptOrg) { m_ptOrg = ptOrg; } |