В моей реализации у меня есть вектор классов. Внутри каждого класса есть unique_ptr
для связанного списка. Только во время выполнения я знаю количество узлов, которые должны быть добавлены в каждый из связанных списков. Некоторые связанные списки могут иметь нулевые узлы. Упрощенный вид моего класса:
class A
{
private:
...
std::unique_ptr< std::list<MyListElement> > ptrList;
...
public:
...
};
Благодаря unique_ptr
мне пришлось перепрыгнуть через обручи, сначала объявив экземпляр-конструктор и оператор копирования-присваивания, и установив их в = delete
, а затем предоставив определения для конструктора по умолчанию, move-constructor и move-assign- оператор. В конце концов, теперь я готов вызвать функцию, которая инициализирует мои связанные списки для каждого объекта.
void A::initListElements(unsigned int numElements)
{
if (numElements > 0)
{
std::unique_ptr< std::list<MyListElement> > tmp(new std::list<MyListElement>);
ptrList = std::move(tmp);
}
else
{
ptrList = 0;
}
}
Правильно ли это? Есть ли способ избежать создания временного unique_ptr 'tmp'?
Вы можете избежать временных reset
метода reset
ptrList.reset(new std::list<MyListElement>);
Полагаю, вам и не нужно else
утверждение.