Будьте осторожны с отзывами участников! Если указанный объект очищается до того, как будет создан экземпляр MyClass, у вас будет недопустимая ссылка. Часто (но не всегда), если вы обнаружите, что вам нужно использовать ссылку на член, это является ранним предупреждением о том, что ваш дизайн может быть улучшен. Я редко использую ссылки на члены для чего-либо другого, кроме как в качестве дескриптора для владельца объекта, где я могу быть абсолютно уверен, что упомянутый объект переживет ссылку.
Это может помочь, если вы немного измените обязанности своего класса. Прямо сейчас вы создаете набор данных, а затем создаете объект, которому вы передаете этот набор данных. Вместо этого, почему бы сначала не построить объект, а затем поместить данные непосредственно в него.
// To start, define your class to allow you to build up the data
class MyMatrix
{
public:
MyMatrix ()
{ }
void setData (int x, int y, int data)
{ this->myData [x][y] = data; }
int getData (int x, int y)
{ return this->myData [x][y]; }
private:
vector<vector<int> > myData;
}
// Then, create a vector of 6 (or however many you need) matrices
int numberOfMatrices = 6;
vector<MyMatrix> myCube (numberOfMatrices);
// Then, fill in the vector
for (int matrixIndex = 0; matrixIndex < numberOfMatrices; matrixIndex++)
{
// Fill in the data for this matrix
MyMatrix ¤tMatrix = myCube [matrixIndex];
currentMatrix.setData (0 /* x */, 0 /* y */, 0 /* data */);
// ... rest of data
}
Тогда у вас есть все данные, уже находящиеся в ваших объектах, готовые для обработки по мере необходимости. Кроме того, каждый объект владеет своими данными, поэтому, пока объект находится рядом, его данные будут действительными. Лучше всего то, что использование объектов с полезными именованными функциями-членами сделает ваш код намного более самодокументированным, чем тонны вложенных контейнеров.