在运行时初始化unique_ptr

时间:2013-10-21 13:24:12

标签: c++ c++11 smart-pointers unique-ptr

在我的实现中,我有一个类向量。在每个类中,有一个unique_ptr到一个链表。仅在运行时才知道应添加到每个链接列表的节点数。某些链接列表可能没有节点。 我班级的简化视图是:

class A
{
private:
    ...
    std::unique_ptr< std::list<MyListElement> > ptrList;
    ...

public:
    ...
};

感谢unique_ptr,我不得不跳过首次声明复制构造函数和复制赋值运算符并将它们设置为= delete,然后提供默认定义 - 构造函数,移动构造函数和移动赋值运算符。毕竟,我现在准备调用初始化每个对象的链接列表的函数。

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'吗?

1 个答案:

答案 0 :(得分:3)

您可以使用reset方法

来避免临时
ptrList.reset(new std::list<MyListElement>);

我相信你不需要else陈述。