在图C ++插入的unique_ptr

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在图C ++插入的unique_ptr相关的知识,希望对你有一定的参考价值。

我有类型ObjectArray的C ++对象

typedef map<int64_t, std::unique_ptr<Class1>> ObjectArray;

什么是创建一个unique_ptr类型为Class1的一个新对象,并将其插入式ObjectArray的对象语法?

答案

作为第一个的话,我不会把它ObjectArray如果它是一个地图,而不是一个数组。

无论如何,你可以插入对象是这样的:

ObjectArray myMap;
myMap.insert(std::make_pair(0, std::unique_ptr<Class1>(new Class1())));

或者这样说:

ObjectArray myMap;
myMap[0] = std::unique_ptr<Class1>(new Class1());

这两种形式之间的区别是,如果关键0已经存在于地图上,前者将失败,而第二个将覆盖其值与新的。

在C ++ 14,则可能需要改为使用从std::make_unique()表达构建unique_ptrnew。例如:

myMap[0] = std::make_unique<Class1>();
另一答案

如果你想添加一个现有的指针插入到地图上,你将不得不使用std ::举动。

例如:

std::unique_ptr<Class1> classPtr(new Class1);

myMap.insert(std::make_pair(0,std::move(classPtr)));
另一答案

除了以前的答案,我想指出的是,还有一种方法emplace(它的方便,当你不能/不想做一个副本),所以你可以写这样的:

ObjectArray object_array;
auto pointer = std::make_unique<Class1>(...);  // since C++14
object_array.emplace(239LL, std::move(pointer));
// You can also inline unique pointer:
object_array.emplace(30LL, std::make_unique<Class1>(...));

以上是关于在图C ++插入的unique_ptr的主要内容,如果未能解决你的问题,请参考以下文章

代码神器,美化你的课程报告

代码神器,美化你的课程报告

编程算法 - 有序双循环链表的插入 代码(C)

Latex中插入C语言代码

求C语言 数据结构中的链表创建,插入和删除代码

线性表的插入和删除操作代码(C语言)