Вложенные классы в C++ контринтуитивны (воняют)

Вот сидишь ты, никого не трогаешь, никому не мешаешь, пишешь функцию у класса:

1414
33
22
11
11

Задайся вопросом: в каком отношении должны (или могут) находиться внешний и вложенный классы? Десятки ответов на этот вопрос должны дать понять, почему нет одного стандартного решения.
То, чего ты хочешь достичь, проще всего сделать так:

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;
}

3
1
Ответить

мне очень понравился этот код, я его сел и построчно разобрал, что он делает.

Видимо, я так делать не буду, потому что в объемлющем классе у меня будет лежать вектор вложенных, и тогда получается, что во всём векторе будет дублироваться один и тот же указатель на объемлющий класс, что приведёт к распуханию памяти, затрачиваемой на экземпляр объемлющего класса.

Ответить