ノードは、グラフを解析するときにノードを格納するために使用されるデータ構造です。
サンプルコードは次のとおりです。
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 の実装を使用して、コピーのコストを最小限に抑える必要があります。もしそうなら(私は疑問に思います)、NodeCの代わりにNodeBの使用がほとんどの場合に見られるのはなぜですか?
ありがとうございました