2

在我的实现中,我有一个类向量。在每个类中都有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'?

4

1 回答 1

4

reset你可以用方法避免临时工

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

我相信你不需要else声明。

于 2013-10-21T13:29:23.717 回答