Нет ничего плохого в методе, который возвращает указатель на вектор: vector<MyClass>* myMethod()
. Но вы должны задать себе несколько вопросов, например:
- Следует ли указывать вектор? Разве это не может быть
vector<MyClass>
?
- Если этот метод также выделяет память для этого вектора?
- Должно ли вызывающее устройство этого метода
delete
/free
этой памяти?
А ваш второй вопрос: я бы вектор указателей на объекты MyClass
(vector<MyClass*>
) только тогда, когда это действительно необходимо. Это вызовет некоторые проблемы с управлением памятью, поэтому давайте выбираем более простой способ.
Хорошо, давайте поговорим об этом вопросе: Должен ли этот метод также выделять память для этого вектора?
Если цель этого метода состоит в том создать вектор, то да, метод должен также выделять для него память:
vector<MyClass>* myMethod()
{
vector<MyClass>* v = new vector<MyClass>;
// initialize, fill or do whatever with this vector
return v;
}
абонент должен очистить то:
vector<MyClass>* v = myMethod();
// do some stuff
delete v; // clean up
Если целью является только получение указателя на определенный вектор, который не может быть получен вызывающим абонентом, он может выглядеть так:
vector<MyClass> _x; // caller can not access _x but myMethod can
vector<MyClass>* myMethod()
{
return &_x;
}
абонент не должен удалить этот вектор в этом случае:
vector<MyClass>* v = myMethod();
// do some stuff, don't delete v
'Я делаю функцию, которая будет возвращать вектор объектов класса MyClass' Нет, это не так. Вы возвращаете указатель. –
'правильно вернуть указатель? Это зависит от многих, многих вещей. –
В вашем примере кода (a) используется недопустимый указатель и недействительный разыменование указанного недопустимого указателя; (b) не имеет смысла, потому что вы не вставляете указатель в вектор вообще –