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

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

1414
33
22
11
11

Нравятся комментарии, что автор поста все неправильно делает и так оно не работает, мол они то знают лучше. На самом деле рассуждения правильные, в яве такое например есть, но в C#, который очень похож на яву, уже такого нет. Т.е. это решение зависит от того как язык спроектирован. Но у такого подхода есть и недостаток, это утечки памяти - т.к. дочерний объект хранит ссылку на родителя и про это можно банально забыть, что запутает сборщик мусора. Хотя в С++ сборщика мусора нет, поэтому не важно.
Могу сказать по C#, зачем делать вложенный класс, раз в статье прозвучало, что это не имеет смысла. В C# имеет, т.к. вложенный класс может обращаться к приватным полям класса в который он вложен. Плюс это еще и удобно, все в одно место запихнуть и разбить на классы. Возможно и в С++ также, не пробовал.
На самом деле мне нравится, что класс не знает о вложенности, код получается прозрачным и предсказуемым, а если нужно, чтобы знал, просто передаешь ссылку. И к такому подходу привыкаешь.

2
Ответить

А ну еще вложенный класс, который приватный нигде светится не будет, тоже может быть полезно.

1
Ответить