C++ 在运行时初始化唯一的\u ptr

C++ 在运行时初始化唯一的\u ptr,c++,c++11,smart-pointers,unique-ptr,C++,C++11,Smart Pointers,Unique Ptr,在我的实现中,我有一个类向量。每个类中都有一个链接列表的唯一\u ptr。只有在运行时,我才知道应该添加到每个链表中的节点数。某些链表可能没有节点。 我的类的简化视图是: class A { private: ... std::unique_ptr< std::list<MyListElement> > ptrList; ... public: ... }; 这是正确的做法吗?是否有某种方法可以避免创建临时唯一的\u ptr“tmp”?

在我的实现中,我有一个类向量。每个类中都有一个链接列表的
唯一\u ptr
。只有在运行时,我才知道应该添加到每个链表中的节点数。某些链表可能没有节点。 我的类的简化视图是:

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

public:
    ...
};

这是正确的做法吗?是否有某种方法可以避免创建临时唯一的\u ptr“tmp”?

您可以使用
重置
方法避免临时设置

ptrList.reset(new std::list<MyListElement>);
ptrList.reset(新标准::列表);

我相信,您不需要
其他
语句。

您可以使用
重置
方法避免临时事件

ptrList.reset(new std::list<MyListElement>);
ptrList.reset(新标准::列表);

我相信,你不需要
其他的
声明。

“多亏了
独特的ptr
,我不得不跳出困境”。。。代码使用
unique\u ptr
的根本原因是想跳出困境吗?因为我看不到其他原因。为什么要使用唯一的ptr<代码> STD::清单< /C>管理内存本身,没有理由在堆上分配它。编译器不为你跳过所有的环吗?@高塔不需要这样做,只要包含对象是正确的,它们就被正确地破坏了。你错过了C++的基本概念。得到。如果类A的对象具有
std::list
成员,则当对象被销毁时,该成员已被销毁。这一切都是免费的,没有必要去寻找“更简单”的方法。多亏了
独特的\u ptr
,我不得不跳出困境“。。。代码使用
unique\u ptr
的根本原因是想跳出困境吗?因为我看不到其他原因。为什么要使用唯一的ptr<代码> STD::清单< /C>管理内存本身,没有理由在堆上分配它。编译器不为你跳过所有的环吗?@高塔不需要这样做,只要包含对象是正确的,它们就被正确地破坏了。你错过了C++的基本概念。得到。如果类A的对象具有
std::list
成员,则当对象被销毁时,该成员已被销毁。这一切都是免费的,没有必要找到“更简单”的方法。通过重置(没有其他块),我能够让它按预期工作,所以我将接受这个答案。但是,对于这个特殊的问题,我甚至不需要一个唯一的ptr!通过重置(没有其他块),我能够让它按预期工作,所以我将接受这个答案。但是,对于这个特殊的问题,我甚至不需要一个唯一的ptr!