Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Делаю первые шаги в Куте. Нашел пример как показать messagebox Код: plaintext 1. 2. 3. Я ожидал увидеть что то типа: Код: plaintext 1. Возник вопрос как это тогда работает без создания объекта, т.е. мы имеем просто ссылку msgBox а объекта нет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2014, 01:46 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Тут тебе не паскаль. msgBox - в натуре объект, а не какая-то там ссылка. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2014, 02:08 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovТут тебе не паскаль. msgBox - в натуре объект, а не какая-то там ссылка. Дима - запарил ))) Вопрос адресован был к кутешникам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2014, 02:21 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Почитал в доке куте, что QMessageBox msgBox; фактически создает статический объект в стеке. кутеAs you have recognized already there are different ways to use QMessageBox. The static method is for displaying a message box quickly. IMHO it is more a matter of taste and preference which you are using. However, the non-static methods you are referring are different from the location where you are placing the instance. The first method uses the stack for the complete object. The second method is using the heap Так в принципе понятно, идем дальше, самое интересное в словах кутеThe first method uses the stack for the complete object. Открываю исходники QMessageBox.h и ищу слово static. В итоге ничего напоминающего на создание статического объекта в стеке - нет. Т.е. я ожидал что статический стековый объект - будет глобальным stackoverflowA static variable is basically a global variable, even if you cannot access it globally. Usually there is an address for it that is in the executable itself. There is only one copy for the entire program. No matter how many times you go into a function call (or class) (and in how many threads!) the variable is referring to the same memory location. И поэтому использование Код: plaintext 1. плохой тон ввиду потоков и проч, ввиду того что объект один глобально. Поправьте меня если я не прав. После этого не охота практиковать использование QMessageBox без new. Также получается что фраза из приведенного выше текста автор.. uses the stack for the complete object .. не верна. Потому что объект static variable is basically a global variable - т.е. объект все таки в хипе, а ссылка на него в стеке - так ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2014, 03:32 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Judo, Слово "статический" в тех цитатах, что вы привели, относится к методам, а не объекту. А чтобы создать статический объект нужно явно указать static при его объявлении. Более того, нельзя вообще создать "статический объект в стеке". Можно либо в стеке либо статический. Таким образом ваши выводы про глобальность объекта, проблемы с потоками и пр. не соответствуют действительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2014, 05:41 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Объекты создаются либо статически (при компиляции вы заранее знаете, что этот объект точно будет нужен) либо динамически (в процессе работы программы, но может и не понадобиться), статические объекты размещаются в стеке, динамические в куче. QMessageBox msgBox; - это статическое создание объекта в стеке. QMessageBox mb = new QMessageBox(); - это динамическое создание объекта в куче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2014, 15:47 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Sheraton, Откуда вы эту терминологию берете :) По месту выделения памяти для данных объекты делятся на - автоматические (в стеке) - статические (в глобальном сегменте данных) - динамические (в куче) Ни в каком другом смысле слово "статический" по отношению к объектам в С/С++ не применяется. И поэтому ни при каких обстоятельствах статические объекты не могут размещаться в стеке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2014, 16:21 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySheraton, Откуда вы эту терминологию берете :) По месту выделения памяти для данных объекты делятся на - автоматические (в стеке) - статические (в глобальном сегменте данных) - динамические (в куче) Ни в каком другом смысле слово "статический" по отношению к объектам в С/С++ не применяется. И поэтому ни при каких обстоятельствах статические объекты не могут размещаться в стеке. Это уже детали. Для новичка изучающего С++ лучше простое объяснение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2014, 16:38 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
И кстати это не моя терминология. Это из книги Липпмана "Язык программирования С++. Вводный курс" Издательство "Невский Диалект", 2003 год. стр.50. "В С++ объекты могут быть размещены либо статически - во время компиляции, либо динамически - во время выполнения программы, путем вызова функций из стандартной библиотеки. Основная разница в использовании этих методов - в их эффективности. Статическое размещение более эффективно, так как выделение памяти происходит до выполнения программы, однако оно гораздо менее гибко, потому что мы должны заранее знать тип и размер размещаемого объекта." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2014, 16:48 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
SheratonЭто уже детали. Для новичка изучающего С++ лучше простое объяснение. Это не детали. Там выше чел уже запутался и искал глобальные объекты там, где их нет, именно из-за неуместного употребления термина "статический" по отношению к методу создания объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2014, 16:48 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
SheratonИ кстати это не моя терминология. Это из книги Липпмана "Язык программирования С++. Вводный курс" Издательство "Невский Диалект", 2003 год. стр.50. "В С++ объекты могут быть размещены либо статически - во время компиляции, либо динамически - во время выполнения программы, путем вызова функций из стандартной библиотеки. Основная разница в использовании этих методов - в их эффективности. Статическое размещение более эффективно, так как выделение памяти происходит до выполнения программы , однако оно гораздо менее гибко, потому что мы должны заранее знать тип и размер размещаемого объекта." Так тут как раз не про стековые, а про настоящие статические объекты написано :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2014, 16:51 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Вы все усложняете, нужно объяснить более просто, память выделяется либо ДО выполнения программы либо ВО время выполнения программы. Все что ДО это НЕ ДИНАМИЧЕСКОЕ а все что ВО время выполнения это ДИНАМИЧЕСКОЕ выделение. А все эти ваши разделения на статическую- автоматическую и динамическую память, только усложняют простые вещи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2014, 17:03 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
SheratonА все эти ваши разделения на статическую- автоматическую и динамическую память, только усложняют простые вещи.ага, а потом эти новички берут и задают вот такой вопрос 16630227 Потому что не понимают, что такое "статический", а что такое "на стеке". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2014, 18:25 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
SheratonВы все усложняете, нужно объяснить более просто, память выделяется либо ДО выполнения программы либо ВО время выполнения программы. Все что ДО это НЕ ДИНАМИЧЕСКОЕ а все что ВО время выполнения это ДИНАМИЧЕСКОЕ выделение. А все эти ваши разделения на статическую- автоматическую и динамическую память, только усложняют простые вещи. Код: plaintext 1. 2. 3. 4. Вот в этом коде память переменной a, которую вы выше назвали созданной статически, выделяется ДО или ВО время исполнения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2014, 19:29 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky.......... Код: plaintext 1. 2. 3. 4. Вот в этом коде память переменной a, которую вы выше назвали созданной статически, выделяется ДО или ВО время исполнения? Память выделяется ДО времени исполнения (даже не смотря на то, что находится внутри функции) и не важно в статическом разделе памяти или автоматическом, важно ДО. А если бы было: Код: plaintext 1. то это было бы выделение ВО время исполнения и выделялась бы в куче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2014, 20:31 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
забыл int после new ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2014, 20:32 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
ну и без а после int new ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2014, 20:32 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
:)) в смысле int* a = new int(2); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2014, 20:33 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
SheratonAnatoly Moskovsky Код: plaintext 1. 2. 3. 4. Вот в этом коде память переменной a, которую вы выше назвали созданной статически, выделяется ДО или ВО время исполнения? Память выделяется ДО времени исполнения (даже не смотря на то, что находится внутри функции) и не важно в статическом разделе памяти или автоматическом, важно ДО. Извините, но это вообще не так. Память для автоматических переменных не выделяется ДО исполнения программы. Она выделяется в момент каждого вызова функции (т.е. во время исполнения), причем сколько раз вызывают функцию, столько раз и выделяется память. А то что компилятор размер этой памяти заранее рассчитывает, так он при "new a" тоже заранее размер рассчитывает (при компиляции). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2014, 21:11 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyИзвините, но это вообще не так. Память для автоматических переменных не выделяется ДО исполнения программы. Она выделяется в момент каждого вызова функции (т.е. во время исполнения), причем сколько раз вызывают функцию, столько раз и выделяется память. А то что компилятор размер этой памяти заранее рассчитывает, так он при "new a" тоже заранее размер рассчитывает (при компиляции). Не надо извиняться. Мы живем в свободном обществе, поэтому каждый человек может думать, так как считает правильным. Я буду придерживаться, мнения указанного в книге, выдержки из которой я привел выше. Она у меня сейчас по правую руку, рядом с мышкой лежит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2014, 21:22 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
SheratonМы живем в свободном обществе, поэтому каждый человек может думать, так как считает правильным Это не вопрос мнения. Память либо выделяется либо нет. Если функция не вызвана, то никакого выделения памяти для автоматической переменной не происходит, независимо от вашего мнения. И кстати цитата из этой книги, которую вы привели выше, никак не подтвержает ваше мнение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 00:09 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
А капец нафлудили ))) Шучу. Начнем с того что я не новичок .. Давайте не будем обсуждать простые вещи типа, локальных, глобавльных, регстровых переменных. Anatoly MoskovskyСлово "статический" в тех цитатах, что вы привели, относится к методам, а не объекту. А чтобы создать статический объект нужно явно указать static при его объявлении. Меня интересует статический объект, на методы мне фиолетово (не о них речь сейчас). Именно его я и искал в модуле QMessageBox и не нашел, там есть только статические методы. Если он там есть то приведите строку кода из этого модуля - собственно в чем и суть вопроса. Второй вопрос насчет трактования что статические объекты размещаются в стеке, Для меня это звучит странно, но так было сказано, боооольшим специлистом на QT Привожу его слова: Understanding the different ways to instantiate the QMessageBox class Andre Andre 6399 posts Certified Specialist Qt DevNet ModeratorAs you have recognized already there are different ways to use QMessageBox. The static method is for displaying a message box quickly. IMHO it is more a matter of taste and preference which you are using. However, the non-static methods you are referring are different from the location where you are placing the instance. The first method uses the stack for the complete object. The second method is using the heap. See this for a short information on heap and stack. [quora.com] Такой вот крутой из себя модератор заявляет вот такие вот вещи. Звучит бредово - потому что если есть боольшой статический объект, то на камнях с 32 битной адресацией, он может переполнить сегмент стека. Поэтому второй мой вопрос и был насчет - The first method uses the stack for the complete object. Здесь акцентируем внимание на слово complete . Так вот либо у них модераторы глупые либо он реально весь целиком в стеке сидит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 00:49 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
JudoМеня интересует статический объект, на методы мне фиолетово (не о них речь сейчас). Именно его я и искал в модуле QMessageBox и не нашел, там есть только статические методы. Если он там есть то приведите строку кода из этого модуля - собственно в чем и суть вопроса. Да нет там в исходниках класса никакого статического объекта. Статический или нет - определяете вы, как пользователь класса. Я вам уже написал, что в той цитате не про объект говорили, а про методы создания - статический (через объявление переменной) и динамический (через new). Но такая терминология вводит в заблуждение, поскольку не делает разницы между данными способами создания объектов: Код: plaintext 1. 2. 3. 4. 5. m1 - действительно статический объект (как это описано в стандарте), а m2 - автоматический(стековый) - у них совершенно разное время жизни. JudoПоэтому второй мой вопрос и был насчет - The first method uses the stack for the complete object. Здесь акцентируем внимание на слово complete . Врядли полностью на стеке объект создается. Там наверняка есть вложенные объекты которые размещаются в куче. Иначе для следующей команды надо было бы заранее резервировать фиксированный массив в объекте для хранения строки, а никакого фиксированного лимита там нет, уверен. Код: plaintext 1. JudoТак вот либо у них модераторы глупые либо он реально весь целиком в стеке сидит Не стоит путать глупость с невежеством :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 01:30 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky +1 Спасибо за разьяснения. Проблема была в том что если бы в Java написать Код: java 1. Или в Дельфи Код: pascal 1. То это не создаст объект. А просто у нас будет ссылка-имя которой потом надо присвоить объект с помощью new или (:=TThread.Create) В С++ тоже есть new. И я думал что для не элементарных типов его надо всегда использовать. Поэтому QMessageBox msgBox; выглядит странно - т.е. ссылка есть а объект не выделен. Может быть это какой то хитрый статический конструктор или фича С++ - видать надо читать ману.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 02:10 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
JudoВ С++ тоже есть new. И я думал что для не элементарных типов его надо всегда использовать. Нет. В С++ эти два способа абсолютно равноправны с точки зрения функциональности (если не рассматривать размещение и время жизни объекта). И никак специально не надо объявлять класс чтобы обоими способами можно было пользоваться. Иногда создатели класса запрещают (в документации либо средствами языка) создание объекта иначе чем через new (например при необходимости использовании смартуказателей). Но если явно не запретили - значит вы можете применять оба способа. Никакой особой разницы не будет. Особенно для классов реализующих GUI, поскольку все они - суть обертки над нижележащими примитивами ОС. Да и в Qt насколько я помню, все GUI классы реализованы через PImpl, т.е. содержат лишь указатель на фактическую реализацию, так что все равно все в куче выделяется :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 02:27 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, Тут определенно брешь в моих знаниях С++. За последние пять-семь лет много нового появилось в языке. Мои знания в С++ начались с Borland 3.1 и завершились на VS 6.0 Тогда самой новой фишкой было namespace - затем я перешел на другие технологии. Надо будет наверстывать упущенное. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 03:05 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Посоветуйте книжку, почитать - Страуструпа в двух томах или уже круче мана есть со всеми новшествами ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 03:11 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Judo, Достаточно почитать любой вменяемый учебник. Даже "С++ для идиотов за 21 день". Область видимости переменных не менялась с момента создания языка. Все то на чем ты застрял уже существовало в Borland 3.1 (и даже раньше). Все новшества языка это попытки превратить в функциональный и ты до них дойдешь еще очень-очень не скоро. Поэтому просто бери любой примитивный учебник и читай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 03:22 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
White Owl Область видимости переменных не менялась с момента создания языка. Все то на чем ты застрял уже существовало в Borland 3.1 (и даже раньше). Ну не совсем. В Borland 3 вот такой код Код: plaintext 1. 2. 3. не вызывал проблем. Сейчас же вам придётся объявить i "повторно"... ТС на почитать? Да хоть классика http://www.stroustrup.com/programming.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 10:38 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
JudoПроблема была в том что если бы в Java написать Код: java 1. Или в Дельфи Код: pascal 1. То это не создаст объект. А просто у нас будет ссылка-имя которой потом надо присвоить объект с помощью new или (:=TThread.Create) В С++ тоже есть new. И я думал что для не элементарных типов его надо всегда использовать. Поэтому QMessageBox msgBox; выглядит странно - т.е. ссылка есть а объект не выделен. Может быть это какой то хитрый статический конструктор или фича С++ - видать надо читать ману.. А вот тут происходит что-то странное. С++ с основания понимал различие между указателем и не-указателем (собственно, наследовано из С). И если написать int i = new(), то компилятор даст по рукам и не позволит такого сделать. Позже появились ссылки, суть автоматически разыменуемые указатели (но они обязаны инициализироваться по месту объявления). Поэтому ничего странного тут нет - ну нету тут никакой ссылки; а есть экземпляр класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 10:46 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
JudoПроблема была в том что если бы в Java ... Или в Дельфи .. То это не создаст объект. А просто у нас будет ссылка-имя которой потом надо присвоить объект... Вспомнился старый анекдот: программист FORTRAN может писать программы FORTRAN на любом языке программирования. Не стоит ожидать, что постулаты "другого мира" окажутся верными или хотя бы будут работать в другом. Например, если по примеру Java начать чремерно использовать new, то утечка памяти вам обеспечена (почистить забудете, либо ненужные накладные расходы на умные указатели появятся) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 11:00 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Judo Andre Andre 6399 posts Certified Specialist Qt DevNet ModeratorAs you have recognized already there are different ways to use QMessageBox. The static method is for displaying a message box quickly. IMHO it is more a matter of taste and preference which you are using. However, the non-static methods you are referring are different from the location where you are placing the instance. The first method uses the stack for the complete object. The second method is using the heap. See this for a short information on heap and stack. [quora.com] Такой вот крутой из себя модератор заявляет вот такие вот вещи. Звучит бредово - потому что если есть боольшой статический объект, то на камнях с 32 битной адресацией, он может переполнить сегмент стека. Поэтому второй мой вопрос и был насчет - The first method uses the stack for the complete object. Здесь акцентируем внимание на слово complete . Так вот либо у них модераторы глупые либо он реально весь целиком в стеке сидит Где вы увидели здесь статический объект? Здесь вам явно говорят - статический метод ("static method"). Смотри: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Здесь a1 - обычный (не-статический) экземпляр класса A, все поля и методы которого, кроме объявленных static, хранятся в стеке. Каждый экземпляр класса имеет свои собственные "копии" обычных членов-данных и членов-методов. static-методы и поля разделяются (т.е. одни на всех) между всеми экземплярами класса. Это позволяет, например, выполнить, A::get_x() без создания экземпляра класса. А вот A::get_a() вызовет ошибку - сначала нужно создать экземпляр, хотябы анонимный: A().get_a(). Если же кому-то очень хочется статическую переменную класса, то слово static ему в помощь (см a2). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 11:19 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
JudoDimitry SibiryakovТут тебе не паскаль. msgBox - в натуре объект, а не какая-то там ссылка. Дима - запарил ))) Вопрос адресован был к кутешникам Да, какой он нехороший ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 12:27 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
JudoПочитал в доке куте, что QMessageBox msgBox; фактически создает статический объект в стеке. Ёлы-палы! "Прочитал" -- это же круто! Вообще-то это написано в любом учебнике по С++ или даже по С. Там же можно было бы найти и что такое static, stack, и чем они отличаются. Причем важно : это надо было бы сделать до попыток знакомства с QT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 12:32 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
SheratonAnatoly MoskovskySheraton, Откуда вы эту терминологию берете :) По месту выделения памяти для данных объекты делятся на - автоматические (в стеке) - статические (в глобальном сегменте данных) - динамические (в куче) Ни в каком другом смысле слово "статический" по отношению к объектам в С/С++ не применяется. И поэтому ни при каких обстоятельствах статические объекты не могут размещаться в стеке. Это уже детали. Для новичка изучающего С++ лучше простое объяснение. Нифига себе детали ... Это -- основы. Ты вот нагонишь всякой пурги, он-то книжек не читает, читает только форумы -- и будет всю жисть считать, что auto -- это static. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 12:34 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
SheratonИ кстати это не моя терминология. Это из книги Липпмана "Язык программирования С++. Вводный курс" Издательство "Невский Диалект", 2003 год. стр.50. "В С++ объекты могут быть размещены либо статически - во время компиляции, либо динамически - во время выполнения программы, путем вызова функций из стандартной библиотеки. Основная разница в использовании этих методов - в их эффективности. Статическое размещение более эффективно, так как выделение памяти происходит до выполнения программы, однако оно гораздо менее гибко, потому что мы должны заранее знать тип и размер размещаемого объекта." Значит, плохая книга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 12:34 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
SheratonВы все усложняете, нужно объяснить более просто, память выделяется либо ДО выполнения программы либо ВО время выполнения программы. Все что ДО это НЕ ДИНАМИЧЕСКОЕ а все что ВО время выполнения это ДИНАМИЧЕСКОЕ выделение. А все эти ваши разделения на статическую- автоматическую и динамическую память, только усложняют простые вещи. Есть принципиальная разница. Статические данные все непотокобезопасны (если, конечно, не TLS). Автоматические (стековые) -- наоборот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 12:36 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
SheratonAnatoly MoskovskyИзвините, но это вообще не так. Память для автоматических переменных не выделяется ДО исполнения программы. Она выделяется в момент каждого вызова функции (т.е. во время исполнения), причем сколько раз вызывают функцию, столько раз и выделяется память. А то что компилятор размер этой памяти заранее рассчитывает, так он при "new a" тоже заранее размер рассчитывает (при компиляции). Не надо извиняться. Мы живем в свободном обществе, поэтому каждый человек может думать, так как считает правильным. Я буду придерживаться, мнения указанного в книге, выдержки из которой я привел выше. Она у меня сейчас по правую руку, рядом с мышкой лежит. Ага, каждый в праве сам устанавливать, сколько будет 2 х 2 , 5 или 7... Только не обижайся, когда при расчёте твоей зарплаты бухгалтер посчитате, что лучше, чтобы 2 х 2 было равно 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 12:39 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
JudoAnatoly Moskovsky, Тут определенно брешь в моих знаниях С++. За последние пять-семь лет много нового появилось в языке. Родной мой, это у тебя гнилая отмаза. Понятия классов памяти есть ещё даже в С, а в С++ они были всегда, с рождения, и никогда это не менялось в стандарте. В вышеупомянутых тобой продуктах все классы памяти поддерживались. Так что у тебя не брешь -- у тебя просто пропасть под ногами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 12:43 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
BagaBagaWhite Owl Область видимости переменных не менялась с момента создания языка. Все то на чем ты застрял уже существовало в Borland 3.1 (и даже раньше). Ну не совсем. В Borland 3 вот такой код Код: plaintext 1. 2. 3. не вызывал проблем. Сейчас же вам придётся объявить i "повторно"... ТС на почитать? Да хоть классика http://www.stroustrup.com/programming.html Это не классы памяти. Это область видимости переменных цикла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 12:44 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
BagaBagaНе стоит ожидать, что постулаты "другого мира" окажутся верными или хотя бы будут работать в другом. Например, если по примеру Java начать чремерно использовать new, то утечка памяти вам обеспечена (почистить забудете, либо ненужные накладные расходы на умные указатели появятся) Вобщем если я вспомню... был пример из Java когда попытка уйти от явного new приводила к еще большему "утеканию" кучи. Вобщем trust to technology, братия but don't try to use вашу технологию в других языках и парадигмах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 14:59 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
maytonпример из Java когда попытка уйти от явного new Сорри за оффтоп, а это как - уйти от new в джаве? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 15:03 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Я могу ошибаться но кажется это был пример с созданием StringBuilder в цикле и второй вариант с повторным использованием этого-же объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 15:12 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
maytonЯ могу ошибаться но кажется это был пример с созданием StringBuilder в цикле и второй вариант с повторным использованием этого-же объекта. Чушь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 15:29 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
BagaBagaГде вы увидели здесь статический объект? Здесь вам явно говорят - статический метод ("static method"). Смотри: [src c++] class A{ public: ... На кой черт мне сдался этот левый код. Еще раз - в третий раз - речь идет о конкретном файле QMessageBox Где в нем - по вашему мнению - статический метод (бред какой-то) - который отвечает за создание уже в моей проге QMessageBox msg. Если это метод то звучит как полная чушь. Кусок кода приведите из модуля QMessageBox.h ? а не этот левый код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 15:33 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Хм... не могу найти где я это видел. Ладно. Попробую на досуге воспроизвести. Главное суть - как показать утекание (рециркуляцию) памяти. Сойдут-ли графики JVisualVM. Вобщем это мне вопрос в виде задания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 15:34 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
static constructors in C++? need to initialize private static objects To get the equivalent of a static constructor, you need to write a separate ordinary class to hold the static data and then make a static instance of that ordinary class. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Но ничего подобного в модуле QT нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 15:37 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
JudoBagaBagaГде вы увидели здесь статический объект? Здесь вам явно говорят - статический метод ("static method"). Смотри: [src c++] class A{ public: ... На кой черт мне сдался этот левый код. Еще раз - в третий раз - речь идет о конкретном файле QMessageBox Где в нем - по вашему мнению - статический метод (бред какой-то) - который отвечает за создание уже в моей проге QMessageBox msg. Если это метод то звучит как полная чушь. Кусок кода приведите из модуля QMessageBox.h ? а не этот левый код Рискну посоветовать не использовать такие эпитеты как "бред" или "чушь" по отношению к собеседникам. Ваш статус - это статус человека который задаёт вопрос. А вы взяли менторский тон. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 15:42 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
maytonРискну посоветовать не использовать такие эпитеты как "бред" или "чушь" по отношению к собеседникам. Ваш статус - это статус человека который задаёт вопрос. А вы взяли менторский тон. Это было в ответ на соответствующие высказывания одного из : White OwlДостаточно почитать любой вменяемый учебник. Даже "С++ для идиотов за 21 день". Область видимости переменных не менялась с момента создания языка. Все то на чем ты застрял уже существовало в Borland 3.1 (и даже раньше). Все новшества языка это попытки превратить в функциональный и ты до них дойдешь еще очень-очень не скоро. Поэтому просто бери любой примитивный учебник и читай. Да кстати для такого высокопарного White Owl - коммент VS 6.0. в каком году был? а стандарт Стандарт C++ на 2003 год (namespace) Поэтому White Owl сравниванием эти две даты и делаем интересный вывод ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 15:51 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
JudoНо ничего подобного в модуле QT нет Ну а звёздочку ты где-нибудь в объявлении QMessageBox видишь? Она не суслик, всегда указывается явно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 15:52 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovJudoНо ничего подобного в модуле QT нет Ну а звёздочку ты где-нибудь в объявлении QMessageBox видишь? Она не суслик, всегда указывается явно. Причем тут вообще указатель? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 15:54 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
JudoПричем тут вообще указатель? При всём. Ты, в стартовом посте объявляешь не указатель. И удивляешься что не-указателю не надо ничего присваивать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 15:57 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Ответ нашел здесь : Чем отличается Class_A* a=new Class_A(); от Class_A a; ? тем что с помощью оператора new память выделяется во время работы программы в куче, во втором случае на этапе компиляции. В первом случае мы работаем с экземпляром объекта через указатель Там он был всего в два ответа. Здесь же нафлудили... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 16:10 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
JudoОтвет нашел здесь : Чем отличается Class_A* a=new Class_A(); от Class_A a; ? тем что с помощью оператора new память выделяется во время работы программы в куче, во втором случае на этапе компиляции. В первом случае мы работаем с экземпляром объекта через указатель Там он был всего в два ответа. Здесь же нафлудили..."во втором случае на этапе компиляции" - ответ не правильный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 16:13 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
BarloneТам он был всего в два ответа. Здесь же нафлудили..."во втором случае на этапе компиляции" - ответ не правильный.[/quot] В момент запуска в глобальном сегменте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 16:31 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
JudoBarloneТам он был всего в два ответа. Здесь же нафлудили..."во втором случае на этапе компиляции" - ответ не правильный. В момент запуска в глобальном сегменте[/quot]Если это объявление переменной вне функции, то да. А если переменная объявлена внутри функции, то в момент выполнения этой строки кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 16:38 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
BarloneА если переменная объявлена внутри функции, то в момент выполнения этой строки кода. Barlone, В каком сегменте память будет выделена? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 16:40 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Если переменная объявлена внутри функции, то память под переменную будет автоматически выделена на стеке в момент выполнения этой строки кода, и освобождена автоматически при выходе из области видимости переменной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 16:41 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Да, и еще после выделения памяти на стеке будет вызван конструктор, который при желании программиста может выделить еще динамическую память в куче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 16:45 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
JudoBarloneА если переменная объявлена внутри функции, то в момент выполнения этой строки кода. Barlone, В каком сегменте память будет выделена?Это будет зависеть от того, где в коде прописано создание объекта. Ты можешь считать меня хамом и всяческо-мерзопакостным человеком, но все-же, возьми учебник и почитай. Сегментов не два как ты думаешь, а минимум четыре для примитивного случая и до бесконечности для приложений с разделяемыми библиотеками. В минимуме, какое приложение имеет: сегмент данных, сегмент неинициализированных данных, стек и кучу. Объект может быть в любом из них. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 16:49 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Для дельфиста самой большой неожиданностью наверное будет автоматический вызов конструкторов и деструкторов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 16:53 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
в классе QMessageBox есть 6 статических методов, которые позволяют показать этот самый мессаджбокс одной строчкой кода, типа: Код: plaintext 1. полностью готовые к употреблению. Judo, ты этого хотел? Или о чём ты уже 3ю страницу споришь со всеми подряд? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 16:54 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
egorych, он интересуется где там память выделяется: Код: plaintext 1. Даже не глядя в исходники QT, рискну предположить, что конструктор QMessageBox выделяет какую-то память в куче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 16:57 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
White Owl... Сегментов не два как ты думаешь, а минимум четыре для примитивного случая и до бесконечности для приложений с разделяемыми библиотеками.... Где ты прочитал что я думаю что их только два ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 17:06 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
BarloneДаже не глядя в исходники QT, рискну предположить, что конструктор QMessageBox выделяет какую-то память в куче.а не пофигу ли пользователю класса, выделяет ли класс в куче чего то, или нет? Главное, чтоб удалял за собой ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 17:08 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
BarloneДаже не глядя в исходники QT, рискну предположить, что конструктор QMessageBox выделяет какую-то память в куче. Вопрос был конкретно про QT, а не про предположения. Есть конкретная статья на QT где модератор говорит про сегмент стека. На что был ответ Anatoly MoskovskyJudoТак вот либо у них модераторы глупые либо он реально весь целиком в стеке сидит Не стоит путать глупость с невежеством :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 17:10 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
egorychBarloneДаже не глядя в исходники QT, рискну предположить, что конструктор QMessageBox выделяет какую-то память в куче.а не пофигу ли пользователю класса, выделяет ли класс в куче чего то, или нет? Главное, чтоб удалял за собой ))) Опять для тех кто в танке и не читает сообщения - обсуждение в начале было про переполнение сегмента по сравнению с кучей и про потоко безопасность - вот тогда вот пользователю будет не пофиг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 17:12 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
egorychа не пофигу ли пользователю класса, выделяет ли класс в куче чего то, или нет? Главное, чтоб удалял за собой )))он где-то на предыдущей странице беспокоился, что стек переполнится :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 17:12 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Judo, >> Опять для тех кто в танке и не читает сообщения да я уже нить потерял, о чём ты споришь )))) >> обсуждение в начале было про переполнение сегмента брат, какого сегмента? ты создал объект на стеке, о переполнении стека надо думать, а он, как правило, большой. Мессаджбоксами его переполнить довольно сложно. P.S. Там ещё Sheraton всех окончательно запутал своими "простыми объяснениями", конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 17:21 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
BarloneЕсли переменная объявлена внутри функции, то память под переменную будет автоматически выделена на стеке в момент выполнения этой строки кода, и освобождена автоматически при выходе из области видимости переменной. Что скорее всего тоже не очень большой правдой ))) Если смотреть дизассемблером, то скорее всего память под все локальные переменные "выделится" в первой же строчке ф-ции add sp, [размер_фрейма_под_локальные_переменные] /возможно sub, не помню, откуда и куда растет стек. Возможно со старших адресов к младшим/ Когда они будут инициализированы ))), это уже другой вопрос. JudoЕсть конкретная статья на QT где модератор говорит про сегмент стека. Если Вы про эту цитату: 16632002 То, плохо зная английский, я бы предположил, что человек говорит о том, что СТАТИЧЕСКИМ МЕТОДАМ пофиг (!) как и где был выделена память под экземпляр. А вот для не статических, важно где размещен объект: "на стеке" или "в куче". JudoЗдесь акцентируем внимание на слово complete. Так вот либо у них модераторы глупые либо он реально весь целиком в стеке сидит Модераторы возможно умные. Целиком в стеке. [quot Judo]egorych...обсуждение в начале было про переполнение сегмента по сравнению с кучей и про потоко безопасность - вот тогда вот пользователю будет не пофиг 1. Ну... придется докупить еще памяти в компьютер... Правда, чем в этом случае может помочь куча, не очень понятно ))) 2. Тема потоко-безопасности не раскрыта. Объект не является статическим (что это Вам и пытались объяснить), т.ч. к потокам это не имеет никакого значения. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 17:42 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
MasterZivНифига себе детали ... Это -- основы. Ты вот нагонишь всякой пурги, он-то книжек не читает, читает только форумы -- и будет всю жисть считать, что auto -- это static. Не надо утрировать до такого уровня. Придет время узнает что такое auto и что такое static если вообще это понадобится, а пока для изучения, нечего забивать голову таким деталями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 18:18 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
MasterZiv Значит, плохая книга. Ну конечно же, Стенли Липман вообще дурак, занимался какой-то ерундой вместе с Бьярном Страуструпом в начале 80-х. А вот MasterZiv гораздо лучше знает С++ чем все эти пердуны, которые создали С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 18:21 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
MasterZivЕсть принципиальная разница. Статические данные все непотокобезопасны (если, конечно, не TLS). Автоматические (стековые) -- наоборот. Потоки для новичка изучающего С++???? Да на С++ можно всю жизнь программировать и до потоков так и не дойти в виду отсутствия надобности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 18:23 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
SheratonMasterZivЕсть принципиальная разница. Статические данные все непотокобезопасны (если, конечно, не TLS). Автоматические (стековые) -- наоборот. Потоки для новичка изучающего С++???? Да на С++ можно всю жизнь программировать и до потоков так и не дойти в виду отсутствия надобности. Ты имел в виду использование Unix-processes вместо threads? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 18:37 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Дорогой мой Judo, да вы тролль обыкновенный. Ничем иным нельзя объяснить ваше маниакальное желание приписать человеку бредовое утверждение и требовать его доказательства. Ложь №1. Именно вы утверждаете, что QT создаст статический объект, и при том глобальный статический объект: "я ожидал что статический стековый объект - будет глобальным ". Но постоянно приписываете это ни в чём не повинному модератору форума QT и даже обвиняете, что он несёт бред. Ложь №2. JudoНа кой черт мне сдался этот левый код. Еще раз - в третий раз - речь идет о конкретном файле QMessageBox Где в нем - по вашему мнению - статический метод (бред какой-то) - который отвечает за создание уже в моей проге QMessageBox msg. Если это метод то звучит как полная чушь. Кусок кода приведите из модуля QMessageBox.h ? а не этот левый код Это твой бред. И не надо мне его приписывать. Я за этот бред не подписывался. Ложь №3. JudoОпять для тех кто в танке и не читает сообщения - обсуждение в начале было про переполнение сегмента по сравнению с кучей и про потоко безопасность - вот тогда вот пользователю будет не пофиг Вопрос первого топика звучал так JudoВозник вопрос как это тогда работает без создания объекта, т.е. мы имеем просто ссылку msgBox а объекта нет ? Т.е. вопрос лежал в плоскости вашего непонимание основ С++: понятия конструктора и деструктора, порядка их вызова при создании экземпляра класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 18:39 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Я конечно извиняюсь, но называть "статическими" переменные не являющимися такими - это бред Лично я, когда изучал программирование в школе, мы СНАЧАЛА проходили обычные переменные, а уже потом указатели и кучу (даже, не уверен, что школьный курс программирования так далеко заходил). О статических переменных (что под этим словом подразумевается в C), лично я, даже вообще не думаю. У меня в коде статических переменных раз, два и все. Переворачивать все с ног на голову и заявлять, что "есть куча, а все что не в куче это .... и так проще понять", мне кажется глупой идеей. Есть просто переменная имеющая значение, есть указатель, который значение не хранит, а хранит ссылку и память выделяется вручную с помощью вызова new. Все и так крайне просто. И ничего придумывать для "упрощения" не нужно. Если не страдать "хибернейтом головного мозга". IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 18:44 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
SheratonНу конечно же, Стенли Липман вообще дурак Между "знать" и "уметь доходчиво объяснить" - дистанция огромного размера. Даже если не принимать во внимание (не)адекватность переводчиков. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 18:45 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
JudoBagaBagaГде вы увидели здесь статический объект? Здесь вам явно говорят - статический метод ("static method"). Смотри: [src c++] class A{ public: ... На кой черт мне сдался этот левый код. Еще раз - в третий раз - речь идет о конкретном файле QMessageBox Где в нем - по вашему мнению - статический метод (бред какой-то) - который отвечает за создание уже в моей проге QMessageBox msg. Если это метод то звучит как полная чушь. Кусок кода приведите из модуля QMessageBox.h ? а не этот левый код Ты удивишься, но такого кода в природе нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 18:52 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevЕсть просто переменная имеющая значение, есть указатель, который значение не хранит, а хранит ссылку и память выделяется вручную с помощью вызова new. Все и так крайне просто. Вот именно из-за этой простоты и непонятно: с чего ТС решил, что у него переменная это указатель. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 18:52 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
JudoBarloneА если переменная объявлена внутри функции, то в момент выполнения этой строки кода. Barlone, В каком сегменте память будет выделена? в сегменье стека. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 18:54 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
egorychJudo, ты этого хотел? Или о чём ты уже 3ю страницу споришь со всеми подряд? Он спорит, что нужно читать: форумы или учебники. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 18:56 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevЕсли Вы про эту цитату: 16632002 То, плохо зная английский, я бы предположил, что человек говорит о том, что СТАТИЧЕСКИМ МЕТОДАМ пофиг (!) как и где был выделена память под экземпляр. А вот для не статических, важно где размещен объект: "на стеке" или "в куче". JudoЗдесь акцентируем внимание на слово complete. Так вот либо у них модераторы глупые либо он реально весь целиком в стеке сидит Там, в форуме по QT, весь вопрос человека сводится к "Я тут вызываю QMessageBox, всё хорошо работает, но я не понимаю, где же чёрт побери new ?" Ровно к тому же самому сводится и вопрос стартера данного топика. Оба не читали элементарных книжек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 19:06 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
SheratonMasterZivЗначит, плохая книга. Ну конечно же, Стенли Липман вообще дурак, занимался какой-то ерундой вместе с Бьярном Страуструпом в начале 80-х. А вот MasterZiv гораздо лучше знает С++ чем все эти пердуны, которые создали С++. Знаешь, очень даже может быть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 19:07 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Ладно, подводим итоги . Judo, ты всё понял , или ещё что-то осталось непонятным ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 19:09 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
MasterZivSheratonпропущено... Ну конечно же, Стенли Липман вообще дурак, занимался какой-то ерундой вместе с Бьярном Страуструпом в начале 80-х. А вот MasterZiv гораздо лучше знает С++ чем все эти пердуны, которые создали С++. Знаешь, очень даже может быть... После взгляда на примеры классов (список и прочее), которые предлагал Страуструп в своей книге - у меня сложилось такое же мнение. Аналогично, мне очень понравилась фраза в книге Гради Буча "Объектно ориентированный анализ и программирование". Смысл примерно был такой: мы делали систему управления персоналом (!!!) для большой корпорации, людей мы завели в список и выяснили (!!!), что корпорация очень большая и памяти нам не хватает После этого, хочется закрыть книжку и воскликнуть: "чувак! ты про СУБД слышал?" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 19:17 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Предлагаю закрыть ветку. Мне кажется всем уже всё ясно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 19:21 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Ну сейчас дождёмся "ОК" от топикстартера, и закроем (или сама закроется). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 19:21 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Я предлагаю Judo такую трактовку: "В С++ объекты могут быть размещены либо статически - во время компиляции, либо динамически - во время выполнения программы..." А потом когда Judo освоится в С++, можно расширить понятие "статически", на собственно статически и автоматически. Иначе, наслушавшись мнения местных гуру, Judo с перепугу убежит в Java/С# и от туда будет ругать С++ в каждой ветке форума и говорить, что С++ вчерашний день, для бородатых, прокуренных маньяков в толстых вязанных свитерах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 19:26 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Sheratonможно расширить понятие "статически", на собственно статически и автоматически. Вообще-то это "динамически" придётся расширять на "автоматически" и "собственно динамически"... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 19:32 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
SheratonЯ предлагаю Judo такую трактовку: "В С++ объекты могут быть размещены либо статически - во время компиляции, либо динамически - во время выполнения программы..." А потом когда Judo освоится в С++, можно расширить понятие "статически", на собственно статически и автоматически. Иначе, наслушавшись мнения местных гуру, Judo с перепугу убежит в Java/С# и от туда будет ругать С++ в каждой ветке форума и говорить, что С++ вчерашний день, для бородатых, прокуренных маньяков в толстых вязанных свитерах. Давно уже написал что пора закрыть - еще на первой странице авторAnatoly Moskovsky +1 Но набежали, начали, флудить .... Тогда повторно предложил закрыть уже на третьей странице авторОтвет нашел здесь: Там он был всего в два ответа. Здесь же нафлудили... И все равно кто то не удержался чтобы показать себя гением в элементарных вещах. И вот ты предлагаешь сейчас в третий раз уже закрыть тему, но снова кто нибудь не удержится сверкнуть своими знаниями в простейших вещах Dimitry SibiryakovSheratonможно расширить понятие "статически", на собственно статически и автоматически. Вообще-то это "динамически" придётся расширять на "автоматически" и "собственно динамически"... И теперь снова набежит толпа вменяющая раз уж это простейшие вещи к чему вопрос? И снова придется отвечать что я давно уж сколько лет С++ не пользовал, а другими вещами занимался, Из которых Sibiryakov в курсе по моим топикам только про Delphi. SheratonJudo с перепугу убежит в Java/С# и от туда будет ругать С++ в каждой ветке форума и говорить, что С++ вчерашний день, для бородатых, прокуренных маньяков в толстых вязанных свитерах И снова подтвердится, что флуд на четыре страницы, есть вещь нормальная И не зря я убегу на stackoverflow и oracle java forum. Потому что как ты написал прокуренных маньяков - демонстрирующих свое хамство - я устал. Продолжайте лить его еще дальше и раздуйте хоть на десять страниц. Видать это и есть специфика русского характера. Мне (все точка) - комментировать очередного гения (по его мнению) - надоело. Bye. Можете дальше продолжать флуд в этом топике ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 19:44 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovВообще-то это "динамически" придётся расширять на "автоматически" и "собственно динамически"... Опять 25. Я принял трактовку из книги Стенли Липмана "Язык программирования С++. Вводный курс" Издательство "Невский Диалект", 2003 год. на странице 50. Там сформулировано просто и понятно. Все эти разделения на "автоматически-статически" только путают изучающих С++ проще говоря демагогия. В книге Бьерна Страуструпа "Язык программирования С++. Специальное издание." Издательство "Бином"-"Невский Диалект" 2001 года. Такие детали как "Статическая-автоматическая-свободная память (динамическая или куча)" вообще вынесены за рамки книги в Приложение В. "Технические подробности" (страница 920), дабы не забивать голову изучающим С++ всякой чепухой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 19:45 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Sheraton & Dimitry, Вы в какой то лес залезаете. Есть переменная. Она может хранить: int, char, double, объекты какие-то etc..., в общем _значения_, либо указатель (что тоже в принципе является значением). Если она хранит указатель, то программист должен явно выделить память под данные и/или получить откуда-то (библиотека, ОС) ссылку на уже готовый объект. А еще, объекты можно сохранять (сериализовать?) в файл... и хранить на диске... ))) Термин "статически", IMHO, предполагается то, что написано "static". Переменная в функции, без данного ключевого слова, статической являться по определению не может. Ну и термин "динамически" я обычно тоже видел только в контексте heap. Уверять, что переменные на стеке "динамические", мне тоже кажется немного не очевидно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 19:48 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
SheratonВ книге Бьерна Страуструпа... Данного товарища читал в 98 году. Он предполагал, что люди читающие его книгу знают ОСНОВЫ языка C. Все же, C++ это расширение C. Если не брать в расчет проблем производительности, то можно такими вещами голову себе не забивать. Все передавать by value. Конструктор копирования for ever. А вот если о производительности задумываться... то тут действительно начинается чехарда. Указатели vs ссылки, место где выделен объект, время жизни объекта и так далее. Но "простым" объяснением, тут все равно не отделаешься. Или человек должен это понимать или, по результату, он будет задавать глупые вопросы. Но и начинать лучше на с "где выделен объект"... а C... понимать разницу между переменной, хранящей значение, и указателем. А так же передача параметров by value, by reference. Иначе, действительно наступит чехорда. Вот лично я вообще не понимаю, зачем данный товарищ ввел в язык понятие reference (Object &x). Что бы всех запутать? Раньше, смотря на вызов метода, всегда было понятно, как передается переменная by value или by reference. И это было хорошо! Теперь - фиг поймешь. Наверное тоже хотел упростить жизнь. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 20:00 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsevзачем данный товарищ ввел в язык понятие reference (Object &x). Что бы всех запутать? Чтобы ввести тип результата для операции разыменования. Без этого невозможно было реализовать множество фич С++, например перегрузку операторов, выведение типов в шаблонах. А то что вы считаете непонятным, другой может посчитать более понятным :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2014, 20:13 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
SheratonОпять 25. Я принял трактовку из книги Стенли Липмана "Язык программирования С++. Вводный курс" Издательство "Невский Диалект", 2003 год. на странице 50. Там сформулировано просто и понятно.Товарищу Липману гореть в аду. Либо гореть в аду переводчику. Потому что написано просто, понятно и неправильно. SheratonВсе эти разделения на "автоматически-статически" только путают изучающих С++ проще говоря демагогия.Это особенности языка которые надо понимать. Хотя если ты считаешь это демагогией, ну тогда будь последовательным и не обращай внимания на светофоры и дорожные знаки. А то ишь понапридумывали табличек и лампочек бессмысленных... SheratonВ книге Бьерна Страуструпа "Язык программирования С++. Специальное издание." Издательство "Бином"-"Невский Диалект" 2001 года. Такие детали как "Статическая-автоматическая-свободная память (динамическая или куча)" вообще вынесены за рамки книги в Приложение В. "Технические подробности" (страница 920), дабы не забивать голову изучающим С++ всякой чепухой.А приложение это по твоему не часть книги? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2014, 03:51 |
|
||
|
А где создание объекта
|
|||
|---|---|---|---|
|
#18+
JudoДавно уже написал что пора закрыть - еще на первой странице авторAnatoly Moskovsky +1 Но набежали, начали, флудить .... Тогда повторно предложил закрыть уже на третьей странице авторОтвет нашел здесь : Там он был всего в два ответа. Здесь же нафлудили... Ещё раз, там НЕПРАВИЛЬНО ответили. В обоих случаях память выделяется во время исполнения программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2014, 09:54 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2019289]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
86ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
94ms |
get tp. blocked users: |
1ms |
| others: | 308ms |
| total: | 530ms |

| 0 / 0 |
