Задайся вопросом: в каком отношении должны (или могут) находиться внешний и вложенный классы? Десятки ответов на этот вопрос должны дать понять, почему нет одного стандартного решения. То, чего ты хочешь достичь, проще всего сделать так:
class Outer { public: Outer() : nested(*this) {}
class Nested { public: Nested(Outer& parent) : parent(parent) {} void doSomethingWithParent(int b) { parent.a = b; } Outer& parent; };
мне очень понравился этот код, я его сел и построчно разобрал, что он делает.
Видимо, я так делать не буду, потому что в объемлющем классе у меня будет лежать вектор вложенных, и тогда получается, что во всём векторе будет дублироваться один и тот же указатель на объемлющий класс, что приведёт к распуханию памяти, затрачиваемой на экземпляр объемлющего класса.
Задайся вопросом: в каком отношении должны (или могут) находиться внешний и вложенный классы? Десятки ответов на этот вопрос должны дать понять, почему нет одного стандартного решения.
То, чего ты хочешь достичь, проще всего сделать так:
class Outer
{
public:
Outer() :
nested(*this)
{}
class Nested
{
public:
Nested(Outer& parent) :
parent(parent)
{}
void doSomethingWithParent(int b)
{
parent.a = b;
}
Outer& parent;
};
int a;
Nested nested;
};
int main()
{
Outer o;
o.nested.doSomethingWithParent(100500);
std::cout << o.a << '\n';
return 0;
}
мне очень понравился этот код, я его сел и построчно разобрал, что он делает.
Видимо, я так делать не буду, потому что в объемлющем классе у меня будет лежать вектор вложенных, и тогда получается, что во всём векторе будет дублироваться один и тот же указатель на объемлющий класс, что приведёт к распуханию памяти, затрачиваемой на экземпляр объемлющего класса.