В чем разница? Кроме как синтаксиса обращения. Единственное преимущество вижу в том, что его удалить можно в любой момент. Но сколько ни смотрю исходники программ везде вижу:
CHTMLDoc* pHTMLDoc = new CHTMLDoc;
Потому и возник ламерский вопрос. :)
Backup not found: (A)bort (R)etry (P)anic
Re: Разница между созданием класса динамическим или статичес
Здравствуйте, _Lestat_, Вы писали:
_L_>В чем разница? Кроме как синтаксиса обращения. Единственное преимущество вижу в том, что его удалить можно в любой момент. Но сколько ни смотрю исходники программ везде вижу: _L_>
_L_>CHTMLDoc* pHTMLDoc = new CHTMLDoc;
_L_>
_L_>Потому и возник ламерский вопрос.
Подозреваю что имелось в виду создание на хипе и на стеке. Если время жизни конструироемого тобой обьекта выходит за рамки области видимости текущей функции, то обьект нужно создавать динамически. В противном случае тебя очень даже выручит нединамический вариант на стеке. Еще иногда обьект бывает полем другого обьекта, и тогда, если есть возможность, нужно строить обьект нединамически, в таком случае управление памятью в проекте становится значительно проще. В случаях с динамическими обьектами желательно использовать обертки из смарт поинтеров, в СТЛ есть к примеру auto_ptr, во многих случаях он бывает очень полезен, в других библиотеках есть подобные классы с другими стратегиями, все это делается ради удобства и качественной реализации, нужно стараться как можно больше разгрузить деструктора классов, заставить компилятор беспокоиться о высвобождении занятой динамической памяти.
Will I live tomorrow? Well I just can't say
But I know for sure — I don't live today.
Jimi Hendrix.
_L_>В чем разница? Кроме как синтаксиса обращения. Единственное преимущество вижу в том, что его удалить можно в любой момент. Но сколько ни смотрю исходники программ везде вижу: _L_>
_L_>CHTMLDoc* pHTMLDoc = new CHTMLDoc;
_L_>
_L_>Потому и возник ламерский вопрос.
Динамическая память в С++ используется в следующих типовых случаях
1. Необходимость "ручного" контроля над временем жизни объекта, т.е. моментами его создания/уничтожения.
2. Тип объекта не известен на стадии компиляции (размер массива, конкретный
тип полиморфного объекта).
3. Количество отдельных объектов не известно на стадии компиляции (элементы
списка, узлы дерева).
4. По каким-то имплементационно-зависимым причинам объект не может быть создан в других типах памяти (например, слишком велик для автоматической памяти в данной реализации).
В остальных случаях (если я ничего не упустил) создавать объект имено в динамической памяти нет никакой необходимости.
В твоем примере имеет место, скорее всего, первый или второй случай (или оба сразу).
Best regards,
Андрей Тарасевич
Re[2]: Разница между созданием класса динамическим или стати
На самом деле там ни первый, ни второй вариант не подходят. И размер известен и удаляется он там при выходе из программы. В том случае это, наверное, было просто делом вкуса. :)
Backup not found: (A)bort (R)etry (P)anic
Re[3]: Разница между созданием класса динамическим или стати
Здравствуйте, _Lestat_, Вы писали:
_L_>На самом деле там ни первый, ни второй вариант не подходят. И размер известен и удаляется он там при выходе из программы. В том случае это, наверное, было просто делом вкуса.
А создается он где? В самом начале программы, безусловным образом?
Best regards,
Андрей Тарасевич
Re: Разница между созданием класса динамическим или статичес
Здравствуйте, _Lestat_, Вы писали:
_L_>В чем разница? Кроме как синтаксиса обращения. Единственное преимущество вижу в том, что его удалить можно в любой момент. Но сколько ни смотрю исходники программ везде вижу: _L_>
_L_>CHTMLDoc* pHTMLDoc = new CHTMLDoc;
_L_>
_L_>Потому и возник ламерский вопрос.
Чем меньше в программе динамически создаваемых объектов, тем меньше имеем проблем с утечками памяти. Если есть необходимость создания динамического объекта и использования указателя, лучше подумать, как заменить его на статический... в крайнем случае лучше использовать смарт-поинтеры, авто-поинтеры. Для массивов лучше использовать стандартные контейнеры.
IMHO указатели в явном виде на верхних архитектурных уровнях приложения — это сущесвтенный косяк в проектировании, исключения составляют смарт-поинтеры и авто-поинтеры.
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[2]: Разница между созданием класса динамическим или стати
Здравствуйте, Mr. None, Вы писали:
MN>Здравствуйте, _Lestat_, Вы писали:
_L_>>В чем разница? Кроме как синтаксиса обращения. Единственное преимущество вижу в том, что его удалить можно в любой момент. Но сколько ни смотрю исходники программ везде вижу: _L_>>
_L_>>CHTMLDoc* pHTMLDoc = new CHTMLDoc;
_L_>>
_L_>>Потому и возник ламерский вопрос.
MN>Чем меньше в программе динамически создаваемых объектов, тем меньше имеем проблем с утечками памяти. Если есть необходимость создания динамического объекта и использования указателя, лучше подумать, как заменить его на статический...
Смотря на какой системе работаешь. Вот у Симбиан стак всего 8К — особо не насоздаешься.
Re[3]: Разница между созданием класса динамическим или стати
Здравствуйте, joss, Вы писали:
J>Здравствуйте, Mr. None, Вы писали:
MN>>Здравствуйте, _Lestat_, Вы писали:
_L_>>>В чем разница? Кроме как синтаксиса обращения. Единственное преимущество вижу в том, что его удалить можно в любой момент. Но сколько ни смотрю исходники программ везде вижу: _L_>>>
_L_>>>CHTMLDoc* pHTMLDoc = new CHTMLDoc;
_L_>>>
_L_>>>Потому и возник ламерский вопрос.
MN>>Чем меньше в программе динамически создаваемых объектов, тем меньше имеем проблем с утечками памяти. Если есть необходимость создания динамического объекта и использования указателя, лучше подумать, как заменить его на статический... J>Смотря на какой системе работаешь. Вот у Симбиан стак всего 8К — особо не насоздаешься.
На старых версиях палма стэк был что-то около 3 КБ (могу ошибаться — давно не брал PalmOS в руки, но число именно какое-то такое смешное было) и плюс куча 64КБ и ничего — создавали...
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re: Разница между созданием класса динамическим или статичес
Здравствуйте, _Lestat_, Вы писали: _L_>Потому и возник ламерский вопрос.
... дружищще, да у тебя что ни вопрос по С++, то ламерский!
А не хочешь ли ты прежде книжку Страуструпа (как минимум) прочитать, а уже потом на RSDN спамить глупыми вопросами?
"Дайте мне возможность выпускать и контролировать деньги в государстве и – мне нет дела до того, кто пишет его законы." (c) Мейер Ансельм Ротшильд , банкир.