vig*_*ere 1 c++ shared-ptr lemon-graph-library
为了将shared_ptr分配给柠檬图库中的Graph类型变量,我这样做了:
typedef ListDigraph Graph;
typedef std::shared_ptr<Graph> Process_pointer;
Process_pointer process(new Graph);
Run Code Online (Sandbox Code Playgroud)
它运行正常,但现在我需要为地图对象声明一个shared_ptr,通常地图对象的工作方式如下:
Graph process;
typedef ListDigraph::NodeMap<string> Node_names;
Node_names name(process);
Run Code Online (Sandbox Code Playgroud)
也就是说,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);
Run Code Online (Sandbox Code Playgroud)
我知道,名称的声明是错误的,但我如何分配内存以及用进程对象初始化它.
auto p = std::make_shared<Node_names>(process);
Run Code Online (Sandbox Code Playgroud)
这适用于具有任意数量参数的构造函数的类型.
请注意,这是shared_ptr使用托管对象创建s 的推荐默认方式.请参阅为什么您几乎总是使用make_shared来创建shared_ptrs拥有的对象?.