Это зависит от того, хотите ли вы разделить вектор underying или нет. В целом, я считаю, что рекомендуется избегать совместного использования, когда это возможно, поскольку это устраняет вопрос о собственности на объект. Без разделения:
class ListHandler
{
public:
ListHandler(const std::vector<int>& list) : _list(list) {}
~ListHandler(){}
private:
std::vector<int> _list;
};
Обратите внимание, что, в отличие от вашего примера, я делаю это const
, так как оригинал не будет изменен.Однако, если мы хотим, чтобы повесить на и один и тот же базовый объект, то мы могли бы использовать что-то вроде этого:
class ListHandler
{
public:
ListHandler(std::vector<int>& list) : _list(&list) {}
~ListHandler(){}
private:
std::vector<int>* _list;
};
Обратите внимание, что в данном случае, я выбираю, чтобы оставить вызывающий как владелец объекта (так что ответственность вызывающего абонента заключается в обеспечении того, чтобы список находился на протяжении всего жизненного цикла объекта обработчика списка и что список позже освобождается). Ваш пример, в котором вы взять на себя право собственности также возможность:
class ListHandler
{
public:
ListHandler(std::vector<int>* list) : _list(list) {}
ListHandler(const ListHandler& o) : _list(new std::vector<int>(o._list)) {}
~ListHandler(){ delete _list; _list=0; }
ListHandler& swap(ListHandler& o){ std::swap(_list,o._list); return *this; }
ListHandler& operator=(const ListHandler& o){ ListHandler cpy(o); return swap(cpy); }
private:
std::vector<int>* _list;
};
Хотя выше, конечно, возможно, лично мне это не нравится ... Я считаю, что сбивает с толку для объекта, который не является просто класс интеллектуального указателя, чтобы получить право собственности на указатель на другой объект. Если бы я делал это, я хотел бы сделать его более явным, обернув зЬй :: вектор в смарт-контейнере указатель, как в:
class ListHandler
{
public:
ListHandler(const boost::shared_ptr< std::vector<int> >& list) : _list(list) {}
~ListHandler(){}
private:
boost::shared_ptr< std::vector<int> > _list;
};
Я считаю выше гораздо яснее в общении собственности. Однако все эти разные способы прохождения по списку приемлемы ... просто убедитесь, что пользователи знают, кто будет владеть чем.
Для чего это? Больше контекста даст вам лучшие ответы. – GManNickG