Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
А где создание объекта
|
|||
|---|---|---|---|
|
#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 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38760112&tid=2019289]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 177ms |

| 0 / 0 |
