инициализация unique_ptr во время выполнения

0

В моей реализации у меня есть вектор классов. Внутри каждого класса есть 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'?

Теги:
c++11
smart-pointers
unique-ptr

1 ответ

1
Лучший ответ

Вы можете избежать временных reset метода reset

ptrList.reset(new std::list<MyListElement>);

Полагаю, вам и не нужно else утверждение.

  • 0
    Благодаря сбросу (и никакому другому блоку) я смог заставить его работать как положено, поэтому я собираюсь принять этот ответ. Но, похоже, мне даже не нужен unique_ptr для этой конкретной проблемы!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню