В прошлом, когда мне нужно было создать экземпляр класса, я использовал бы новый, чтобы выделить его в кучу (кроме классов stl и математических классов, таких как vec3 и mat4).
Однако я просто критически смотрел на некоторые из моих кодов и понял, что технически я мог бы просто сделать эти классы в стеке. Они не очень большие, их не нужно изменять за пределами их текущего объема и т.д. Когда мне (иногда) нужно передать их другой функции, я могу использовать ссылку так же легко, как я мог бы передать указатель.
В прошлом я всегда дефолтировал выделение в куче и использовал только стек в определенных случаях, однако теперь мне интересно, было бы лучше по умолчанию выделять в стеке и использовать только кучу, когда
- действительно нужен указатель (т.е. время жизни объекта, чтобы переместить область декларации)
- класс или массив слишком большой для стека
- Наследование требует его (абстрактный базовый класс/интерфейс)
- что-то еще?
Что также поднимает вопрос: насколько большой класс слишком большой (грубо), чтобы разумно выделить в стеке? (предполагая, что мы работаем, как минимум, с смартфонами, и подходим к высокопроизводительным настольным компьютерам). Я просто неохотно беспокоюсь о ограничениях размера стека? (возможно, до тех пор, пока мы не говорим о больших массивах, и ни один класс не будет близок к килобайту)