Node是我们解析图时用来存储Node的数据结构。
这是示例代码:
struct NodeA {
vector<string> vecStrs; // the size of the vecStrs keeps increasing!
};
struct NodeB {
vector<boost::shared_ptr<string> > vecShpStrs;
};
struct NodeC {
boost::shared_ptr<vector<string> > shpVecStrs;
};
int main()
{
NodeA nodeA;
nodeA.vecStrs.push_back("stringA"); // input
cout << "Output from NodeA: " << nodeA.vecStrs.front() << endl; // output
NodeB nodeB;
nodeB.vecShpStrs.push_back(boost::make_shared<string>("stringB"));
cout << "Output from NodeB: " << *(nodeB.vecShpStrs.front()) << endl;
NodeC nodeC;
nodeC.shpVecStrs.reset(new vector<string>());
nodeC.shpVecStrs->push_back("stringC");
cout << "Output from NodeC: " << nodeC.shpVecStrs->front() << endl;
}
请验证我的理解,看看是否正确
问题 1.1 > 每当复制 NodeB 的实例时,存储在向量中的元素集合也会被复制。由于每个元素都是一个 shared_ptr,因此与 NodeA 相比,复制操作的成本更低。
问题 1.2 > 每当复制 NodeC 的实例时,唯一复制的元素是 shared_ptr 并且不复制底层向量,而是在所有引用的 shared_ptr 之间共享它。
问题 2 > 应该使用 NodeC 的工具来使副本成本最低。如果是这样(我怀疑),为什么我大部分时间都看到使用 NodeB 而不是 NodeC?
谢谢