c++ - 初始化 shared_ptr ,当对象需要默认构造函数时

标签 c++ shared-ptr lemon-graph-library

为了将 shared_ptr 分配给柠檬图库中的图类型变量,我这样做了:

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

它工作正常,但现在我需要为 map 对象声明一个 shared_ptr,通常 map 对象是这样工作的:

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

也就是说,name 的默认构造函数需要一个 Graph 对象。

为了为其声明一个 shared_ptr,我这样做了:

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

我知道,name 的声明是错误的,但我如何为它分配内存以及如何使用进程对象对其进行初始化。

最佳答案

使用std::make_shared :

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

这适用于具有任意数量参数的构造函数的类型。

请注意,这是使用托管对象创建 shared_ptr 的推荐默认方式。参见 Why should you almost always use make_shared to create an object to be owned by shared_ptrs? .

关于c++ - 初始化 shared_ptr ,当对象需要默认构造函数时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17189566/

相关文章:

c++ - 包裹在共享指针中时的 vector 构造

c++ - 将共享指针添加到 vector 时出错

c++ - 插入一个元素到柠檬图库 map 而不复制

c++ - 你能关闭 C++ 中的默认复制构造函数吗?

c++ - 使用 cout 将表达式转换为赋值

c++ - 从 Amazon FreeRTOS 的串行问题中读取

c++ - 在 C++ 中实现和使用节点图的方法?

c++ - C/C++ 浮点问题

shared-ptr - shared_ptr 断言像素!= 0 失败

c++ - 在 Lemon Graph Library 中访问 vector 中的映射值