Обычно магазин значения в STL контейнер является оптимальным способом, то вам не нужно беспокоиться о памяти очистить и т.д.
std::vector<myStruct> v; //#1 this is GOOD
std::vector<myStruct*> vp; //#2 this is BAD, you need to clean pointer elements by yourself
в случае 2, вы должны очистить динамически выделенную память себя, что-то вроде:
std::vector<myStruct*> vp;
for(auto it = vp.begin(); it!= vp.end(); ++it)
{
delete *it; // release memory manually
// *it is the elemnt which is poiter, not iterator itself
}
Просто побродить в каких случаях использование указателей должно быть в порядке. Мысль о том, что использование указателей должно минимизировать использование памяти.
Если вам нужно сохранить полиморфизм, скажем, myStruct
служит целью интерфейса, вы можете сохранить его в контейнере STL в качестве указателя.
#include <memory>
#include <vector>
struct myStruct
{
virtual ~myStruct() {};
};
struct Derived : public myStruct
{
};
std::vector<std::unique_ptr<myStruct>> v;
v.push_back(std::unique_ptr<myStruct>(new myStruct)); // pointer points to base object
v.push_back(std::unique_ptr<myStruct>(new Derived)); // pointer points to derived object
Хранить ценности, если у вас нет веских причин не делать этого. – juanchopanza
Спасибо. Просто бродишь, в каких случаях использование указателей должно быть в порядке. Мысль о том, что использование указателей должно минимизировать использование памяти. Извините за вопрос noob - новичок в C++ –
Как это минимизирует использование памяти? – HAL