Название: Приватные члены класса: stack или heap? Отправлено: JamS007 от Август 02, 2012, 15:34 Приветствую.
Я уже больше пол года ничего не писал на плюсах, очень много нюансов позабыл. А сейчас вот решил вернуться, и при объявлении очередного класса задался вопросом: как лучше объявить члены класса? На стеке или в куче? Код (Bar - класс, а не примитивный тип) Если я не ошибаюсь, время доступа к объектам на стеке меньше, чем время доступа к объектам в куче, но стек не резиновый, и чем больше в нем объектов тем больше вероятность нарваться на stack overflow. Также, если мне не изменяет память, в случае, когда экземпляр класса размещен в куче - не важно, как объявлены его члены, они все-равно будут размещены в куче. В общем, кто как объявляет члены класса? по возможности, аргументируйте, пожалуйста свою позицию. Спасибо. P.S. Если уже обсуждалось на форуме, плиз, дайте ссылку. Название: Re: Приватные члены класса: stack или heap? Отправлено: Пантер от Август 02, 2012, 15:38 Если объявляешь на стеке, то должен инклудить в хидер зависимости, что не есть хорошо.
Название: Re: Приватные члены класса: stack или heap? Отправлено: DmitryM от Август 02, 2012, 15:49 Если я не ошибаюсь, время доступа к объектам на стеке меньше, чем время доступа к объектам в куче, но стек не резиновый, и чем больше в нем объектов тем больше вероятность нарваться на stack overflow. А с кучей будет std::bad_alloc.Название: Re: Приватные члены класса: stack или heap? Отправлено: JamS007 от Август 02, 2012, 16:24 А с кучей будет std::bad_alloc. согласен, но размер кучи значительно больше размера стека, что, в свою очередь, уменьшает вероятность возникновения std::bad_alloc. Название: Re: Приватные члены класса: stack или heap? Отправлено: Igors от Август 02, 2012, 16:38 Соображения "что быстрее" и "что больше какой памяти займет" здесь совершенно неуместны. Лучше рассуждать так:
член Bar существует всегда или его может и не быть? В последнем случае указатель. Название: Re: Приватные члены класса: stack или heap? Отправлено: JamS007 от Август 02, 2012, 23:35 Igors, спасибо. Действительно важное замечание, стоящее использования на практике.
Название: Re: Приватные члены класса: stack или heap? Отправлено: Akon от Август 03, 2012, 08:12 До кучи: член Bar существует всегда (в пределах Foo) и является базовым классом, т.о. в классе Foo должен содержаться как указатель или ссылка.
Название: Re: Приватные члены класса: stack или heap? Отправлено: Lagovas от Август 15, 2012, 17:52 Ссылка является константным указателем автоматически разыменуемый компилятором, как пишет Эккель. Разница между указателем, то, что инициализируется сразу, не может присваиваться другой адрес и он не может быть Null. Т.е. все это гарантирует что там будет что то от начала до конца. Но все же есть разница от константного указателя. Он может инициализироваться адресом на ноль (только что проверил), а значит не факт что там будет что то. Что выбрать решать уже вам, но как по мне, инициализация указателя выглядит красивее чем ссылки. :ptrTypeValue(new Type()) будет красивее в коде, чем инициализация ссылки :refTypeValue(*(new Type())). Но врядли это веский аргумент)
|