コンテナーNode
を使用してバイナリ ツリーを実装するためにカスタム クラスを作成しています。マップのキーはオブジェクトの識別子です。クラスでは、コピー コンストラクターを実装する必要がありました。map<int,Node>
int
Node
Node
マップにオブジェクトを挿入すると、 のコピー コンストラクターが2 回呼び出されるNode
ことに気付きました。Node
なんで?
cout << "node2" << endl;
Node node2;
node2.set_depth(2);
node2.make_it_branch(3,4);
cout << "map" << endl;
map<int,Node> mapping;
cout << "toInsert" << endl;
pair<int,Node> toInsert = pair<int,Node>(2,node2);
cout << "insert" << endl;
mapping.insert(toInsert);
上記のコードを実行すると、出力は次のようになります。
node2
--- Node()
map
toInsert
--- Node(const Node& orig)
insert
--- Node(const Node& orig) // Why does the copy constructor be invoked twice?
--- Node(const Node& orig) // ------------------------------------------------
--- ~Node()
--- ~Node()
--- ~Node()
--- ~Node()