Две возможности совсем не эквивалентны:
- В первом
f()
является функцией-членом node
. - Во втором
f()
является свободной (или областью имен)(Обратите также внимание, что подпись двух f()
различна.)
Теперь обратите внимание, что в первом стиле f()
является функцией-членом inline
.Определение функции-члена внутри тела класса делает его встроенным.Хотя встраивание не гарантируется, это всего лишь подсказка компилятору.Для функций с небольшими телами может быть полезно встроить их, так как это позволит избежать вызова функции через голову.Однако я никогда не видел, чтобы это был фактор «сделай или сломай».
Если вы не хотите или если f()
не подходит для встраивания, вы должны определить его вне тела класса (вероятно, вфайл .cpp) как:
int node::f() { /* stuff here */ }
Если использование памяти является проблемой в вашем коде, то, скорее всего, вышеперечисленные темы не актуальны.Изучение следующего может дать вам подсказку
- Найдите размеры всех классов в вашей программе.Используйте
sizeof
, чтобы найти эту информацию, например, sizeof (node) - Найдите максимальное количество объектов каждого класса, создаваемого вашей программой.
Использование двух приведенных вышеряд информации, оцените использование памяти в худшем случае вашей программой
Использование памяти в худшем случае = n1 * sizeof (node1) + n2 * sizeof (node2) + ...
Если вышеуказанное число слишком велико, у вас есть следующие варианты:
- Сокращение количества максимальных экземпляров классов.Это, вероятно, будет невозможно, потому что это зависит от входных данных для программы, и это вне вашего контроля
- Уменьшите размер каждого класса.Это под вашим контролем, хотя.
Как уменьшить размер классов?Старайтесь компактно упаковывать учеников, чтобы избежать упаковки .