Let's have a simple class:
class Var
{
public:
    explicit Var(const std::string& name, const double v) 
        : value(v), ref(value), _name(name) {};
    ~Var() {};
    double value{};
    double& ref;
    void print()
    {
        std::cout << _name << ":\n";
        std::cout << "\tvalue = " << value << " (" << &value << ")\n";
        std::cout << "\t  ref = " << ref << " (" << &ref << ")\n\n";
    }
private:
    std::string _name;
};
In this case everything is fine:
Var v0("v0", 0.0);
Var v1("v1", 1.0);
Var v2("v2", 2.0);
v0.print();
v1.print();
v2.print();
Output is:
v0:
 value = 0 (000000DDE3D3F878) 
 ref = 0 (000000DDE3D3F878) 
v1:
 value = 1 (000000DDE3D3F8E8) 
 ref = 1 (000000DDE3D3F8E8) 
v2: 
 value = 2 (000000DDE3D3F958) 
 ref = 2 (000000DDE3D3F958)
But when objects are placed in a vector, the ref variable is the same for all objects.
vector<Var> V{};
for (size_t i = 0; i < 3; i++)
{
    std::string name = "V[" + std::to_string(i) + "]";
    V.push_back(Var(name, i));
}
for (size_t i = 0; i < 3; i++)
    V[i].print();
output:
V[0]:
    value = 0 (000002B594F55C70)                                                      
      ref = 2 (000000DDE3D3FA88)
V[1]:
    value = 1 (000002B594F55CA8)                                                      
      ref = 2 (000000DDE3D3FA88)
V[2]:
    value = 2 (000002B594F55CE0)                                                      
      ref = 2 (000000DDE3D3FA88) 
what am I doing wrong?
Blockquote