2
std :: vectorに追加するときのクラスフィールドの奇妙な動作
次の状況で、(clangおよびGCCで)非常に奇妙な動作が見つかりました。nodesクラスのインスタンスである1つの要素を持つベクトルがありますNode。次に、ベクターにnodes[0]新しい関数を追加する関数を呼び出しますNode。新しいノードが追加されると、呼び出し元オブジェクトのフィールドがリセットされます!ただし、関数が終了すると、通常の状態に戻ります。 これは最小限の再現可能な例だと思います: #include <iostream> #include <vector> using namespace std; struct Node; vector<Node> nodes; struct Node{ int X; void set(){ X = 3; cout << "Before, X = " << X << endl; nodes.push_back(Node()); cout << "After, X = " << X << endl; } }; int main() { nodes = …