diff --git a/src/Magnum/SceneGraph/FeatureGroup.h b/src/Magnum/SceneGraph/FeatureGroup.h index 1670d06b2..46982149c 100644 --- a/src/Magnum/SceneGraph/FeatureGroup.h +++ b/src/Magnum/SceneGraph/FeatureGroup.h @@ -51,7 +51,7 @@ template class AbstractFeatureGroup { void add(AbstractFeature& feature); void remove(AbstractFeature& feature); - std::vector*> features; + std::vector>> features; }; /** @@ -86,12 +86,12 @@ template class FeatureGroup: pub /** @brief Feature at given index */ Feature& operator[](std::size_t index) { - return *static_cast(AbstractFeatureGroup::features[index]); + return static_cast(AbstractFeatureGroup::features[index].get()); } /** @overload */ const Feature& operator[](std::size_t index) const { - return *static_cast(AbstractFeatureGroup::features[index]); + return static_cast(AbstractFeatureGroup::features[index].get()); } /** @@ -160,7 +160,7 @@ template using FeatureGroup3D = BasicFeatureGroup3D FeatureGroup::~FeatureGroup() { - for(auto i: AbstractFeatureGroup::features) static_cast(i)->_group = nullptr; + for(auto i: AbstractFeatureGroup::features) static_cast(i.get())._group = nullptr; } template FeatureGroup& FeatureGroup::add(Feature& feature) { diff --git a/src/Magnum/SceneGraph/FeatureGroup.hpp b/src/Magnum/SceneGraph/FeatureGroup.hpp index 2b61092c7..9ad9f3dc7 100644 --- a/src/Magnum/SceneGraph/FeatureGroup.hpp +++ b/src/Magnum/SceneGraph/FeatureGroup.hpp @@ -39,11 +39,12 @@ template AbstractFeatureGroup::A template AbstractFeatureGroup::~AbstractFeatureGroup() = default; template void AbstractFeatureGroup::add(AbstractFeature& feature) { - features.push_back(&feature); + features.push_back(feature); } template void AbstractFeatureGroup::remove(AbstractFeature& feature) { - features.erase(std::find(features.begin(), features.end(), &feature)); + features.erase(std::find_if(features.begin(), features.end(), + [&feature](AbstractFeature& f) { return &f == &feature; })); } }}