I want to store members of a class into a vector. In my class, I have some private variables that I access via constant pointers so that they are protected from being changed (see this post). Problem: When I add instances of the class into a vector during a loop and access them afterwards, all elements seem to be the last one added. Here's a MWE:
#include <iostream>
#include <vector>
using namespace std;
class myClass {
private:
    int x_;
    void init(int x) {
        x_ = x;
    }
public:
    const int &x;
    myClass(int x) : x(x_) {
        init(x);
    };
};
int main(int argc, const char * argv[]) {
    vector<myClass> myVector;
    // Does not work
    for (int j=0; j<3; j++) {
        myVector.push_back(myClass(j));
    }
    for (int j=0; j<3; j++) {
        cout << "1st attempt: " << myVector.at(j).x << endl;
    }
    myVector.clear();
    // Works
    for (int j=0; j<3; j++) {
        myVector.push_back(myClass(j));
        cout << "2nd attempt: " << myVector.at(j).x << endl;
    }
    myVector.clear();
    // Works also
    myVector.push_back(myClass(0));
    myVector.push_back(myClass(1));
    myVector.push_back(myClass(2));
    for (int j=0; j<3; j++) {
        cout << "3rd attempt: " << myVector.at(j).x << endl;
    }
    return 0;
}
Ovious question: What am I doing wrong and can I fix it?
 
     
     
     
     
    