Недавно я перешел на С++ 11, и я стараюсь привыкнуть к хорошим практикам. То, что я в конечном итоге занимаюсь очень часто, это что-то вроде:
class Owner
{
private:
vector<unique_ptr<HeavyResource>> _vectorOfHeavyResources;
public:
virtual const vector<const HeavyResource*>* GetVectorOfResources() const;
};
Это требует от меня сделать что-то вроде добавления _returnableVector и перевода исходных векторов, чтобы иметь возможность вернуть его позже:
_returnableVector = vector<HeavyResource*>;
for (int i=0; i< _vectorOfHeavyResources.size(); i++)
{
_returnableVector.push_back(_vectorOfHeavyResources[i].get());
}
Кто-нибудь заметил подобную проблему? Каковы ваши мысли и решения? Я получаю всю идею собственности прямо здесь?
UPDATE:
Есть еще одна вещь:
Что делать, если один класс возвращает результат некоторой обработки как vector<unique_ptr<HeavyResource>>
(он передает право собственности на результаты вызывающему абоненту), и предполагается, что он будет использоваться для последующей обработки:
vector<unique_ptr<HeavyResource>> partialResult = _processor1.Process();
// translation
auto result = _processor2.Process(translatedPartialResult); // the argument of process is vector<const HeavyResource*>