初始化shared_ptr的,当对象需要一个默认的构造函数(Initialising shared_

2019-10-18 07:12发布

对于柠檬图形库的shared_ptr分配的图表类型变量我这样做:

typedef ListDigraph Graph;
typedef std::shared_ptr<Graph> Process_pointer;
Process_pointer process(new Graph);

它工作得很好,但现在我需要声明一个shared_ptr映射对象,一般情况下,地图对象是这样的:

Graph process;
typedef ListDigraph::NodeMap<string> Node_names;
Node_names name(process);

也就是说,名字要求其默认构造函数图形对象。

对于声明一个shared_ptr吧,我这样做:

typedef ListDigraph::NodeMap<string> Node_names;
typedef std::shared_ptr<Node_names> Nname_pointer;
Nname_pointer name = new Node_names;
name(process);

我知道,对于名字的声明是错误的,但我怎么给它分配的内存以及与工艺对象初始化它。

Answer 1:

使用std::make_shared

auto p = std::make_shared<Node_names>(process);

这适用于类型与参数的任意数量的构造。

请注意,这是推荐的默认方式创建shared_ptr s的管理对象。 见为什么你总是使用make_shared创建由shared_ptrs所拥有的对象?



Answer 2:

Nname_pointer name (new Node_names (process));

备注:这有什么好做的shared_ptr,这将是一个普通指针一样。



文章来源: Initialising shared_ptr , when the object requires a default constructor