Разница между созданием класса динамическим или статическим.
От: _Lestat_ Россия  
Дата: 01.08.04 04:43
Оценка:
В чем разница? Кроме как синтаксиса обращения. Единственное преимущество вижу в том, что его удалить можно в любой момент. Но сколько ни смотрю исходники программ везде вижу:
CHTMLDoc* pHTMLDoc = new CHTMLDoc;

Потому и возник ламерский вопрос. :)
Backup not found: (A)bort (R)etry (P)anic
Re: Разница между созданием класса динамическим или статичес
От: Batiskaf Израиль http://www.mult.ru/
Дата: 01.08.04 05:10
Оценка:
Здравствуйте, _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.
Когда использовать динамическую память
От: Андрей Тарасевич Беларусь  
Дата: 01.08.04 07:18
Оценка: 18 (1) +1
#Имя: FAQ.cpp.whennew
_L_>В чем разница? Кроме как синтаксиса обращения. Единственное преимущество вижу в том, что его удалить можно в любой момент. Но сколько ни смотрю исходники программ везде вижу:
_L_>
_L_>CHTMLDoc* pHTMLDoc = new CHTMLDoc;
_L_>

_L_>Потому и возник ламерский вопрос.

Динамическая память в С++ используется в следующих типовых случаях

    1. Необходимость "ручного" контроля над временем жизни объекта, т.е. моментами его создания/уничтожения.

    2. Тип объекта не известен на стадии компиляции (размер массива, конкретный
    тип полиморфного объекта).

    3. Количество отдельных объектов не известно на стадии компиляции (элементы
    списка, узлы дерева).

    4. По каким-то имплементационно-зависимым причинам объект не может быть создан в других типах памяти (например, слишком велик для автоматической памяти в данной реализации).

В остальных случаях (если я ничего не упустил) создавать объект имено в динамической памяти нет никакой необходимости.

В твоем примере имеет место, скорее всего, первый или второй случай (или оба сразу).
Best regards,
Андрей Тарасевич
http://files.rsdn.org/2174/val.gif
Re[2]: Разница между созданием класса динамическим или стати
От: _Lestat_ Россия  
Дата: 01.08.04 07:28
Оценка:
На самом деле там ни первый, ни второй вариант не подходят. И размер известен и удаляется он там при выходе из программы. В том случае это, наверное, было просто делом вкуса. :)
Backup not found: (A)bort (R)etry (P)anic
Re[3]: Разница между созданием класса динамическим или стати
От: Андрей Тарасевич Беларусь  
Дата: 01.08.04 17:32
Оценка:
Здравствуйте, _Lestat_, Вы писали:

_L_>На самом деле там ни первый, ни второй вариант не подходят. И размер известен и удаляется он там при выходе из программы. В том случае это, наверное, было просто делом вкуса.


А создается он где? В самом начале программы, безусловным образом?
Best regards,
Андрей Тарасевич
http://files.rsdn.org/2174/val.gif
Re: Разница между созданием класса динамическим или статичес
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 02.08.04 03:26
Оценка:
Здравствуйте, _Lestat_, Вы писали:

_L_>В чем разница? Кроме как синтаксиса обращения. Единственное преимущество вижу в том, что его удалить можно в любой момент. Но сколько ни смотрю исходники программ везде вижу:

_L_>
_L_>CHTMLDoc* pHTMLDoc = new CHTMLDoc;
_L_>

_L_>Потому и возник ламерский вопрос.

Чем меньше в программе динамически создаваемых объектов, тем меньше имеем проблем с утечками памяти. Если есть необходимость создания динамического объекта и использования указателя, лучше подумать, как заменить его на статический... в крайнем случае лучше использовать смарт-поинтеры, авто-поинтеры. Для массивов лучше использовать стандартные контейнеры.
IMHO указатели в явном виде на верхних архитектурных уровнях приложения — это сущесвтенный косяк в проектировании, исключения составляют смарт-поинтеры и авто-поинтеры.
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[2]: Разница между созданием класса динамическим или стати
От: joss  
Дата: 02.08.04 06:22
Оценка:
Здравствуйте, Mr. None, Вы писали:

MN>Здравствуйте, _Lestat_, Вы писали:


_L_>>В чем разница? Кроме как синтаксиса обращения. Единственное преимущество вижу в том, что его удалить можно в любой момент. Но сколько ни смотрю исходники программ везде вижу:

_L_>>
_L_>>CHTMLDoc* pHTMLDoc = new CHTMLDoc;
_L_>>

_L_>>Потому и возник ламерский вопрос.

MN>Чем меньше в программе динамически создаваемых объектов, тем меньше имеем проблем с утечками памяти. Если есть необходимость создания динамического объекта и использования указателя, лучше подумать, как заменить его на статический...

Смотря на какой системе работаешь. Вот у Симбиан стак всего 8К — особо не насоздаешься.
Re[3]: Разница между созданием класса динамическим или стати
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 02.08.04 06:28
Оценка:
Здравствуйте, joss, Вы писали:

J>Здравствуйте, Mr. None, Вы писали:


MN>>Здравствуйте, _Lestat_, Вы писали:


_L_>>>В чем разница? Кроме как синтаксиса обращения. Единственное преимущество вижу в том, что его удалить можно в любой момент. Но сколько ни смотрю исходники программ везде вижу:

_L_>>>
_L_>>>CHTMLDoc* pHTMLDoc = new CHTMLDoc;
_L_>>>

_L_>>>Потому и возник ламерский вопрос.

MN>>Чем меньше в программе динамически создаваемых объектов, тем меньше имеем проблем с утечками памяти. Если есть необходимость создания динамического объекта и использования указателя, лучше подумать, как заменить его на статический...

J>Смотря на какой системе работаешь. Вот у Симбиан стак всего 8К — особо не насоздаешься.

На старых версиях палма стэк был что-то около 3 КБ (могу ошибаться — давно не брал PalmOS в руки, но число именно какое-то такое смешное было) и плюс куча 64КБ и ничего — создавали...
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re: Разница между созданием класса динамическим или статичес
От: Rakafon Украина http://rakafon.blogspot.com/
Дата: 20.08.09 15:00
Оценка:
Здравствуйте, _Lestat_, Вы писали:
_L_>Потому и возник ламерский вопрос.

... дружищще, да у тебя что ни вопрос по С++, то ламерский!
А не хочешь ли ты прежде книжку Страуструпа (как минимум) прочитать, а уже потом на RSDN спамить глупыми вопросами?
"Дайте мне возможность выпускать и контролировать деньги в государстве и – мне нет дела до того, кто пишет его законы." (c) Мейер Ансельм Ротшильд , банкир.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.