powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / А где создание объекта
96 сообщений из 96, показаны все 4 страниц
А где создание объекта
    #38759686
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю первые шаги в Куте. Нашел пример как показать messagebox
Код: plaintext
1.
2.
3.
  QMessageBox msgBox;
  msgBox.setText("Hello Here");
  msgBox.exec();



Я ожидал увидеть что то типа:
Код: plaintext
1.
  QMessageBox mb = new QMessageBox();



Возник вопрос как это тогда работает без создания объекта, т.е. мы имеем просто ссылку msgBox а объекта нет ?
...
Рейтинг: 0 / 0
А где создание объекта
    #38759689
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут тебе не паскаль. msgBox - в натуре объект, а не какая-то там ссылка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
А где создание объекта
    #38759692
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТут тебе не паскаль. msgBox - в натуре объект, а не какая-то там ссылка.

Дима - запарил ))) Вопрос адресован был к кутешникам
...
Рейтинг: 0 / 0
А где создание объекта
    #38759701
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитал в доке куте, что 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 msgBox;


плохой тон ввиду потоков и проч, ввиду того что объект один глобально.
Поправьте меня если я не прав. После этого не охота практиковать использование QMessageBox без new.

Также получается что фраза из приведенного выше текста
автор..
uses the stack for the complete object
..
не верна. Потому что объект static variable is basically a global variable - т.е. объект все таки в хипе, а ссылка на него в стеке - так ?
...
Рейтинг: 0 / 0
А где создание объекта
    #38759716
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Judo,

Слово "статический" в тех цитатах, что вы привели, относится к методам, а не объекту.
А чтобы создать статический объект нужно явно указать static при его объявлении.
Более того, нельзя вообще создать "статический объект в стеке". Можно либо в стеке либо статический.
Таким образом ваши выводы про глобальность объекта, проблемы с потоками и пр. не соответствуют действительности.
...
Рейтинг: 0 / 0
А где создание объекта
    #38759845
Sheraton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объекты создаются либо статически (при компиляции вы заранее знаете, что этот объект точно будет нужен) либо динамически (в процессе работы программы, но может и не понадобиться), статические объекты размещаются в стеке, динамические в куче.

QMessageBox msgBox; - это статическое создание объекта в стеке.

QMessageBox mb = new QMessageBox(); - это динамическое создание объекта в куче.
...
Рейтинг: 0 / 0
А где создание объекта
    #38759856
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sheraton,

Откуда вы эту терминологию берете :)

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

Ни в каком другом смысле слово "статический" по отношению к объектам в С/С++ не применяется.
И поэтому ни при каких обстоятельствах статические объекты не могут размещаться в стеке.
...
Рейтинг: 0 / 0
А где создание объекта
    #38759864
Sheraton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySheraton,

Откуда вы эту терминологию берете :)

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

Ни в каком другом смысле слово "статический" по отношению к объектам в С/С++ не применяется.
И поэтому ни при каких обстоятельствах статические объекты не могут размещаться в стеке.

Это уже детали. Для новичка изучающего С++ лучше простое объяснение.
...
Рейтинг: 0 / 0
А где создание объекта
    #38759868
Sheraton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И кстати это не моя терминология. Это из книги Липпмана "Язык программирования С++. Вводный курс" Издательство "Невский Диалект", 2003 год. стр.50.

"В С++ объекты могут быть размещены либо статически - во время компиляции, либо динамически - во время выполнения программы, путем вызова функций из стандартной библиотеки. Основная разница в использовании этих методов - в их эффективности. Статическое размещение более эффективно, так как выделение памяти происходит до выполнения программы, однако оно гораздо менее гибко, потому что мы должны заранее знать тип и размер размещаемого объекта."
...
Рейтинг: 0 / 0
А где создание объекта
    #38759869
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SheratonЭто уже детали. Для новичка изучающего С++ лучше простое объяснение.
Это не детали.
Там выше чел уже запутался и искал глобальные объекты там, где их нет, именно из-за неуместного употребления термина "статический" по отношению к методу создания объектов.
...
Рейтинг: 0 / 0
А где создание объекта
    #38759870
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SheratonИ кстати это не моя терминология. Это из книги Липпмана "Язык программирования С++. Вводный курс" Издательство "Невский Диалект", 2003 год. стр.50.

"В С++ объекты могут быть размещены либо статически - во время компиляции, либо динамически - во время выполнения программы, путем вызова функций из стандартной библиотеки. Основная разница в использовании этих методов - в их эффективности. Статическое размещение более эффективно, так как выделение памяти происходит до выполнения программы , однако оно гораздо менее гибко, потому что мы должны заранее знать тип и размер размещаемого объекта."

Так тут как раз не про стековые, а про настоящие статические объекты написано :)
...
Рейтинг: 0 / 0
А где создание объекта
    #38759876
Sheraton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы все усложняете, нужно объяснить более просто, память выделяется либо ДО выполнения программы либо ВО время выполнения программы. Все что ДО это НЕ ДИНАМИЧЕСКОЕ а все что ВО время выполнения это ДИНАМИЧЕСКОЕ выделение. А все эти ваши разделения на статическую- автоматическую и динамическую память, только усложняют простые вещи.
...
Рейтинг: 0 / 0
А где создание объекта
    #38759903
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SheratonА все эти ваши разделения на статическую- автоматическую и динамическую память, только усложняют простые вещи.ага, а потом эти новички берут и задают вот такой вопрос 16630227
Потому что не понимают, что такое "статический", а что такое "на стеке".
...
Рейтинг: 0 / 0
А где создание объекта
    #38759929
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SheratonВы все усложняете, нужно объяснить более просто, память выделяется либо ДО выполнения программы либо ВО время выполнения программы. Все что ДО это НЕ ДИНАМИЧЕСКОЕ а все что ВО время выполнения это ДИНАМИЧЕСКОЕ выделение. А все эти ваши разделения на статическую- автоматическую и динамическую память, только усложняют простые вещи.

Код: plaintext
1.
2.
3.
4.
int main()
{
   int a = 2;
}


Вот в этом коде память переменной a, которую вы выше назвали созданной статически, выделяется ДО или ВО время исполнения?
...
Рейтинг: 0 / 0
А где создание объекта
    #38759951
Sheraton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky..........

Код: plaintext
1.
2.
3.
4.
int main()
{
   int a = 2;
}


Вот в этом коде память переменной a, которую вы выше назвали созданной статически, выделяется ДО или ВО время исполнения?

Память выделяется ДО времени исполнения (даже не смотря на то, что находится внутри функции) и не важно в статическом разделе памяти или автоматическом, важно ДО.
А если бы было:

Код: plaintext
1.
int *a = new a(2); 



то это было бы выделение ВО время исполнения и выделялась бы в куче.
...
Рейтинг: 0 / 0
А где создание объекта
    #38759952
Sheraton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл int после new
...
Рейтинг: 0 / 0
А где создание объекта
    #38759953
Sheraton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и без а после int new
...
Рейтинг: 0 / 0
А где создание объекта
    #38759955
Sheraton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:)) в смысле int* a = new int(2);
...
Рейтинг: 0 / 0
А где создание объекта
    #38759970
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SheratonAnatoly Moskovsky
Код: plaintext
1.
2.
3.
4.
int main()
{
   int a = 2;
}



Вот в этом коде память переменной a, которую вы выше назвали созданной статически, выделяется ДО или ВО время исполнения?

Память выделяется ДО времени исполнения (даже не смотря на то, что находится внутри функции) и не важно в статическом разделе памяти или автоматическом, важно ДО.
Извините, но это вообще не так.
Память для автоматических переменных не выделяется ДО исполнения программы.
Она выделяется в момент каждого вызова функции (т.е. во время исполнения), причем сколько раз вызывают функцию, столько раз и выделяется память.
А то что компилятор размер этой памяти заранее рассчитывает, так он при "new a" тоже заранее размер рассчитывает (при компиляции).
...
Рейтинг: 0 / 0
А где создание объекта
    #38759976
Sheraton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyИзвините, но это вообще не так.
Память для автоматических переменных не выделяется ДО исполнения программы.
Она выделяется в момент каждого вызова функции (т.е. во время исполнения), причем сколько раз вызывают функцию, столько раз и выделяется память.
А то что компилятор размер этой памяти заранее рассчитывает, так он при "new a" тоже заранее размер рассчитывает (при компиляции).

Не надо извиняться. Мы живем в свободном обществе, поэтому каждый человек может думать, так как считает правильным. Я буду придерживаться, мнения указанного в книге, выдержки из которой я привел выше. Она у меня сейчас по правую руку, рядом с мышкой лежит.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760018
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SheratonМы живем в свободном обществе, поэтому каждый человек может думать, так как считает правильным
Это не вопрос мнения.
Память либо выделяется либо нет.
Если функция не вызвана, то никакого выделения памяти для автоматической переменной не происходит, независимо от вашего мнения.

И кстати цитата из этой книги, которую вы привели выше, никак не подтвержает ваше мнение.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760043
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А капец нафлудили ))) Шучу.
Начнем с того что я не новичок ..
Давайте не будем обсуждать простые вещи типа, локальных, глобавльных, регстровых переменных.

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 .
Так вот либо у них модераторы глупые либо он реально весь целиком в стеке сидит
...
Рейтинг: 0 / 0
А где создание объекта
    #38760067
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JudoМеня интересует статический объект, на методы мне фиолетово (не о них речь сейчас).
Именно его я и искал в модуле QMessageBox и не нашел, там есть только статические методы.
Если он там есть то приведите строку кода из этого модуля - собственно в чем и суть вопроса.
Да нет там в исходниках класса никакого статического объекта.
Статический или нет - определяете вы, как пользователь класса.
Я вам уже написал, что в той цитате не про объект говорили, а про методы создания - статический (через объявление переменной) и динамический (через new). Но такая терминология вводит в заблуждение, поскольку не делает разницы между данными способами создания объектов:
Код: plaintext
1.
2.
3.
4.
5.
QMessageBox m1;
int main()
{
  QMessageBox m2;
}


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

JudoПоэтому второй мой вопрос и был насчет - The first method uses the stack for the complete object.
Здесь акцентируем внимание на слово complete .
Врядли полностью на стеке объект создается.
Там наверняка есть вложенные объекты которые размещаются в куче.
Иначе для следующей команды надо было бы заранее резервировать фиксированный массив в объекте для хранения строки, а никакого фиксированного лимита там нет, уверен.
Код: plaintext
1.
msgBox.setText("Hello Here");



JudoТак вот либо у них модераторы глупые либо он реально весь целиком в стеке сидит
Не стоит путать глупость с невежеством :)
...
Рейтинг: 0 / 0
А где создание объекта
    #38760094
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky
+1
Спасибо за разьяснения.
Проблема была в том что если бы в Java написать
Код: java
1.
  Thread th;


Или в Дельфи
Код: pascal
1.
var th: TThread;


То это не создаст объект. А просто у нас будет ссылка-имя которой потом надо присвоить объект с помощью new или (:=TThread.Create)
В С++ тоже есть new. И я думал что для не элементарных типов его надо всегда использовать.
Поэтому QMessageBox msgBox; выглядит странно - т.е. ссылка есть а объект не выделен.
Может быть это какой то хитрый статический конструктор или фича С++ - видать надо читать ману..
...
Рейтинг: 0 / 0
А где создание объекта
    #38760103
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JudoВ С++ тоже есть new. И я думал что для не элементарных типов его надо всегда использовать.

Нет. В С++ эти два способа абсолютно равноправны с точки зрения функциональности (если не рассматривать размещение и время жизни объекта). И никак специально не надо объявлять класс чтобы обоими способами можно было пользоваться.
Иногда создатели класса запрещают (в документации либо средствами языка) создание объекта иначе чем через new (например при необходимости использовании смартуказателей). Но если явно не запретили - значит вы можете применять оба способа.
Никакой особой разницы не будет. Особенно для классов реализующих GUI, поскольку все они - суть обертки над нижележащими примитивами ОС.
Да и в Qt насколько я помню, все GUI классы реализованы через PImpl, т.е. содержат лишь указатель на фактическую реализацию, так что все равно все в куче выделяется :)
...
Рейтинг: 0 / 0
А где создание объекта
    #38760109
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,
Тут определенно брешь в моих знаниях С++. За последние пять-семь лет много нового появилось в языке.
Мои знания в С++ начались с Borland 3.1 и завершились на VS 6.0
Тогда самой новой фишкой было namespace - затем я перешел на другие технологии.
Надо будет наверстывать упущенное.
Спасибо
...
Рейтинг: 0 / 0
А где создание объекта
    #38760112
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посоветуйте книжку, почитать - Страуструпа в двух томах или уже круче мана есть со всеми новшествами ?
...
Рейтинг: 0 / 0
А где создание объекта
    #38760120
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Judo,

Достаточно почитать любой вменяемый учебник. Даже "С++ для идиотов за 21 день". Область видимости переменных не менялась с момента создания языка. Все то на чем ты застрял уже существовало в Borland 3.1 (и даже раньше).
Все новшества языка это попытки превратить в функциональный и ты до них дойдешь еще очень-очень не скоро. Поэтому просто бери любой примитивный учебник и читай.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760276
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Область видимости переменных не менялась с момента создания языка. Все то на чем ты застрял уже существовало в Borland 3.1 (и даже раньше).


Ну не совсем. В Borland 3 вот такой код

Код: plaintext
1.
2.
3.
for(int i = 0; i<1; ++i)
;
i = 10;


не вызывал проблем. Сейчас же вам придётся объявить i "повторно"...

ТС на почитать? Да хоть классика
http://www.stroustrup.com/programming.html
...
Рейтинг: 0 / 0
А где создание объекта
    #38760294
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JudoПроблема была в том что если бы в Java написать
Код: java
1.
  Thread th;


Или в Дельфи
Код: pascal
1.
var th: TThread;


То это не создаст объект. А просто у нас будет ссылка-имя которой потом надо присвоить объект с помощью new или (:=TThread.Create)
В С++ тоже есть new. И я думал что для не элементарных типов его надо всегда использовать.
Поэтому QMessageBox msgBox; выглядит странно - т.е. ссылка есть а объект не выделен.
Может быть это какой то хитрый статический конструктор или фича С++ - видать надо читать ману..

А вот тут происходит что-то странное. С++ с основания понимал различие между указателем и не-указателем (собственно, наследовано из С). И если написать int i = new(), то компилятор даст по рукам и не позволит такого сделать. Позже появились ссылки, суть автоматически разыменуемые указатели (но они обязаны инициализироваться по месту объявления). Поэтому ничего странного тут нет - ну нету тут никакой ссылки; а есть экземпляр класса.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760316
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JudoПроблема была в том что если бы в Java ...
Или в Дельфи
.. То это не создаст объект. А просто у нас будет ссылка-имя которой потом надо присвоить объект...

Вспомнился старый анекдот: программист FORTRAN может писать программы FORTRAN на любом языке программирования.

Не стоит ожидать, что постулаты "другого мира" окажутся верными или хотя бы будут работать в другом. Например, если по примеру Java начать чремерно использовать new, то утечка памяти вам обеспечена (почистить забудете, либо ненужные накладные расходы на умные указатели появятся)
...
Рейтинг: 0 / 0
А где создание объекта
    #38760352
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
class A{
        public:
        A(){}
        int a;
        static int get_x(){return 1;}
        int get_a(){return a;}
        ~A(){};
    };

int main()
{
    A a1;
    static A a2;
    A::get_x();
   return 0;
}


Здесь a1 - обычный (не-статический) экземпляр класса A, все поля и методы которого, кроме объявленных static, хранятся в стеке. Каждый экземпляр класса имеет свои собственные "копии" обычных членов-данных и членов-методов. static-методы и поля разделяются (т.е. одни на всех) между всеми экземплярами класса. Это позволяет, например, выполнить, A::get_x() без создания экземпляра класса. А вот A::get_a() вызовет ошибку - сначала нужно создать экземпляр, хотябы анонимный: A().get_a(). Если же кому-то очень хочется статическую переменную класса, то слово static ему в помощь (см a2).
...
Рейтинг: 0 / 0
А где создание объекта
    #38760455
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JudoDimitry SibiryakovТут тебе не паскаль. msgBox - в натуре объект, а не какая-то там ссылка.

Дима - запарил ))) Вопрос адресован был к кутешникам

Да, какой он нехороший ...
...
Рейтинг: 0 / 0
А где создание объекта
    #38760466
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JudoПочитал в доке куте, что QMessageBox msgBox; фактически создает статический объект в стеке.


Ёлы-палы! "Прочитал" -- это же круто!

Вообще-то это написано в любом учебнике по С++ или даже по С.
Там же можно было бы найти и что такое static, stack, и чем они отличаются.
Причем важно : это надо было бы сделать до попыток знакомства с QT.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760468
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SheratonAnatoly MoskovskySheraton,

Откуда вы эту терминологию берете :)

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

Ни в каком другом смысле слово "статический" по отношению к объектам в С/С++ не применяется.
И поэтому ни при каких обстоятельствах статические объекты не могут размещаться в стеке.

Это уже детали. Для новичка изучающего С++ лучше простое объяснение.

Нифига себе детали ... Это -- основы. Ты вот нагонишь всякой пурги, он-то книжек не читает, читает только форумы -- и будет всю жисть считать, что auto -- это static.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760469
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SheratonИ кстати это не моя терминология. Это из книги Липпмана "Язык программирования С++. Вводный курс" Издательство "Невский Диалект", 2003 год. стр.50.

"В С++ объекты могут быть размещены либо статически - во время компиляции, либо динамически - во время выполнения программы, путем вызова функций из стандартной библиотеки. Основная разница в использовании этих методов - в их эффективности. Статическое размещение более эффективно, так как выделение памяти происходит до выполнения программы, однако оно гораздо менее гибко, потому что мы должны заранее знать тип и размер размещаемого объекта."


Значит, плохая книга.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760474
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SheratonВы все усложняете, нужно объяснить более просто, память выделяется либо ДО выполнения программы либо ВО время выполнения программы. Все что ДО это НЕ ДИНАМИЧЕСКОЕ а все что ВО время выполнения это ДИНАМИЧЕСКОЕ выделение. А все эти ваши разделения на статическую- автоматическую и динамическую память, только усложняют простые вещи.

Есть принципиальная разница.
Статические данные все непотокобезопасны (если, конечно, не TLS).
Автоматические (стековые) -- наоборот.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760479
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SheratonAnatoly MoskovskyИзвините, но это вообще не так.
Память для автоматических переменных не выделяется ДО исполнения программы.
Она выделяется в момент каждого вызова функции (т.е. во время исполнения), причем сколько раз вызывают функцию, столько раз и выделяется память.
А то что компилятор размер этой памяти заранее рассчитывает, так он при "new a" тоже заранее размер рассчитывает (при компиляции).

Не надо извиняться. Мы живем в свободном обществе, поэтому каждый человек может думать, так как считает правильным. Я буду придерживаться, мнения указанного в книге, выдержки из которой я привел выше. Она у меня сейчас по правую руку, рядом с мышкой лежит.


Ага, каждый в праве сам устанавливать, сколько будет 2 х 2 , 5 или 7...
Только не обижайся, когда при расчёте твоей зарплаты бухгалтер посчитате, что лучше, чтобы 2 х 2 было равно 3.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760489
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JudoAnatoly Moskovsky,
Тут определенно брешь в моих знаниях С++. За последние пять-семь лет много нового появилось в языке.


Родной мой, это у тебя гнилая отмаза. Понятия классов памяти есть ещё даже в С, а в С++ они были всегда,
с рождения, и никогда это не менялось в стандарте.
В вышеупомянутых тобой продуктах все классы памяти поддерживались.
Так что у тебя не брешь -- у тебя просто пропасть под ногами.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760492
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BagaBagaWhite Owl Область видимости переменных не менялась с момента создания языка. Все то на чем ты застрял уже существовало в Borland 3.1 (и даже раньше).


Ну не совсем. В Borland 3 вот такой код

Код: plaintext
1.
2.
3.
for(int i = 0; i<1; ++i)
;
i = 10;


не вызывал проблем. Сейчас же вам придётся объявить i "повторно"...

ТС на почитать? Да хоть классика
http://www.stroustrup.com/programming.html

Это не классы памяти.
Это область видимости переменных цикла.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760709
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BagaBagaНе стоит ожидать, что постулаты "другого мира" окажутся верными или хотя бы будут работать в другом. Например, если по примеру Java начать чремерно использовать new, то утечка памяти вам обеспечена (почистить забудете, либо ненужные накладные расходы на умные указатели появятся)
Вобщем если я вспомню... был пример из Java когда попытка уйти от явного new приводила
к еще большему "утеканию" кучи. Вобщем trust to technology, братия but don't try to use
вашу технологию в других языках и парадигмах.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760715
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonпример из Java когда попытка уйти от явного new
Сорри за оффтоп, а это как - уйти от new в джаве?
...
Рейтинг: 0 / 0
А где создание объекта
    #38760727
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я могу ошибаться но кажется это был пример с созданием StringBuilder в цикле
и второй вариант с повторным использованием этого-же объекта.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760760
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ могу ошибаться но кажется это был пример с созданием StringBuilder в цикле
и второй вариант с повторным использованием этого-же объекта.
Чушь
...
Рейтинг: 0 / 0
А где создание объекта
    #38760771
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BagaBagaГде вы увидели здесь статический объект? Здесь вам явно говорят - статический метод ("static method").
Смотри:
[src c++]
class A{
public:
...
На кой черт мне сдался этот левый код. Еще раз - в третий раз - речь идет о конкретном файле QMessageBox
Где в нем - по вашему мнению - статический метод (бред какой-то) - который отвечает за создание уже в моей проге QMessageBox msg. Если это метод то звучит как полная чушь.
Кусок кода приведите из модуля QMessageBox.h ? а не этот левый код
...
Рейтинг: 0 / 0
А где создание объекта
    #38760773
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм... не могу найти где я это видел. Ладно. Попробую на досуге воспроизвести.
Главное суть - как показать утекание (рециркуляцию) памяти. Сойдут-ли графики
JVisualVM. Вобщем это мне вопрос в виде задания.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760780
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
class StaticStuff
{
     std::vector<char> letters_;

public:
     StaticStuff()
     {
         for (char c = 'a'; c <= 'z'; c++)
             letters_.push_back(c);
     }

     // provide some way to get at letters_
};

class Elsewhere
{
    static StaticStuff staticStuff; // constructor runs once, single instance

};


Но ничего подобного в модуле QT нет
...
Рейтинг: 0 / 0
А где создание объекта
    #38760786
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JudoBagaBagaГде вы увидели здесь статический объект? Здесь вам явно говорят - статический метод ("static method").
Смотри:
[src c++]
class A{
public:
...
На кой черт мне сдался этот левый код. Еще раз - в третий раз - речь идет о конкретном файле QMessageBox
Где в нем - по вашему мнению - статический метод (бред какой-то) - который отвечает за создание уже в моей проге QMessageBox msg. Если это метод то звучит как полная чушь.
Кусок кода приведите из модуля QMessageBox.h ? а не этот левый код
Рискну посоветовать не использовать такие эпитеты как "бред" или "чушь" по отношению к
собеседникам. Ваш статус - это статус человека который задаёт вопрос. А вы взяли
менторский тон.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760803
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonРискну посоветовать не использовать такие эпитеты как "бред" или "чушь" по отношению к
собеседникам. Ваш статус - это статус человека который задаёт вопрос. А вы взяли
менторский тон.

Это было в ответ на соответствующие высказывания одного из :
White OwlДостаточно почитать любой вменяемый учебник. Даже "С++ для идиотов за 21 день". Область видимости переменных не менялась с момента создания языка. Все то на чем ты застрял уже существовало в Borland 3.1 (и даже раньше).
Все новшества языка это попытки превратить в функциональный и ты до них дойдешь еще очень-очень не скоро. Поэтому просто бери любой примитивный учебник и читай.

Да кстати для такого высокопарного
White Owl -
коммент VS 6.0. в каком году был? а стандарт Стандарт C++ на 2003 год (namespace)
Поэтому White Owl сравниванием эти две даты и делаем интересный вывод
...
Рейтинг: 0 / 0
А где создание объекта
    #38760806
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JudoНо ничего подобного в модуле QT нет
Ну а звёздочку ты где-нибудь в объявлении QMessageBox видишь? Она не суслик, всегда
указывается явно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
А где создание объекта
    #38760814
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovJudoНо ничего подобного в модуле QT нет
Ну а звёздочку ты где-нибудь в объявлении QMessageBox видишь? Она не суслик, всегда
указывается явно.

Причем тут вообще указатель?
...
Рейтинг: 0 / 0
А где создание объекта
    #38760825
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JudoПричем тут вообще указатель?
При всём. Ты, в стартовом посте объявляешь не указатель. И удивляешься что не-указателю не
надо ничего присваивать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
А где создание объекта
    #38760850
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ответ нашел здесь :
Чем отличается
Class_A* a=new Class_A();
от
Class_A a;
?
тем что с помощью оператора new память выделяется во время работы программы в куче, во втором случае на этапе компиляции. В первом случае мы работаем с экземпляром объекта через указатель
Там он был всего в два ответа. Здесь же нафлудили...
...
Рейтинг: 0 / 0
А где создание объекта
    #38760853
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JudoОтвет нашел здесь :
Чем отличается
Class_A* a=new Class_A();
от
Class_A a;
?
тем что с помощью оператора new память выделяется во время работы программы в куче, во втором случае на этапе компиляции. В первом случае мы работаем с экземпляром объекта через указатель
Там он был всего в два ответа. Здесь же нафлудили..."во втором случае на этапе компиляции" - ответ не правильный.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760886
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneТам он был всего в два ответа. Здесь же нафлудили..."во втором случае на этапе компиляции" - ответ не правильный.[/quot]
В момент запуска в глобальном сегменте
...
Рейтинг: 0 / 0
А где создание объекта
    #38760908
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JudoBarloneТам он был всего в два ответа. Здесь же нафлудили..."во втором случае на этапе компиляции" - ответ не правильный.
В момент запуска в глобальном сегменте[/quot]Если это объявление переменной вне функции, то да. А если переменная объявлена внутри функции, то в момент выполнения этой строки кода.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760911
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneА если переменная объявлена внутри функции, то в момент выполнения этой строки кода.
Barlone, В каком сегменте память будет выделена?
...
Рейтинг: 0 / 0
А где создание объекта
    #38760914
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если переменная объявлена внутри функции, то память под переменную будет автоматически выделена на стеке в момент выполнения этой строки кода, и освобождена автоматически при выходе из области видимости переменной.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760922
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и еще после выделения памяти на стеке будет вызван конструктор, который при желании программиста может выделить еще динамическую память в куче.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760927
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JudoBarloneА если переменная объявлена внутри функции, то в момент выполнения этой строки кода.
Barlone, В каком сегменте память будет выделена?Это будет зависеть от того, где в коде прописано создание объекта.
Ты можешь считать меня хамом и всяческо-мерзопакостным человеком, но все-же, возьми учебник и почитай.
Сегментов не два как ты думаешь, а минимум четыре для примитивного случая и до бесконечности для приложений с разделяемыми библиотеками.
В минимуме, какое приложение имеет: сегмент данных, сегмент неинициализированных данных, стек и кучу. Объект может быть в любом из них.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760935
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для дельфиста самой большой неожиданностью наверное будет автоматический вызов конструкторов и деструкторов.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760937
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в классе QMessageBox есть 6 статических методов, которые позволяют показать этот самый мессаджбокс одной строчкой кода, типа:
Код: plaintext
1.
QMessageBox::critical( 0, "я сломалсо", "здесь ошибка" );

полностью готовые к употреблению.
Judo, ты этого хотел? Или о чём ты уже 3ю страницу споришь со всеми подряд?
...
Рейтинг: 0 / 0
А где создание объекта
    #38760943
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych, он интересуется где там память выделяется:
Код: plaintext
1.
QMessageBox msgBox;


Даже не глядя в исходники QT, рискну предположить, что конструктор QMessageBox выделяет какую-то память в куче.
...
Рейтинг: 0 / 0
А где создание объекта
    #38760959
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl...
Сегментов не два как ты думаешь, а минимум четыре для примитивного случая и до бесконечности для приложений с разделяемыми библиотеками....
Где ты прочитал что я думаю что их только два ?
...
Рейтинг: 0 / 0
А где создание объекта
    #38760963
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneДаже не глядя в исходники QT, рискну предположить, что конструктор QMessageBox выделяет какую-то память в куче.а не пофигу ли пользователю класса, выделяет ли класс в куче чего то, или нет? Главное, чтоб удалял за собой )))
...
Рейтинг: 0 / 0
А где создание объекта
    #38760964
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneДаже не глядя в исходники QT, рискну предположить, что конструктор QMessageBox выделяет какую-то память в куче.
Вопрос был конкретно про QT, а не про предположения. Есть конкретная статья на QT где модератор говорит про сегмент стека.

На что был ответ
Anatoly MoskovskyJudoТак вот либо у них модераторы глупые либо он реально весь целиком в стеке сидит
Не стоит путать глупость с невежеством :)
...
Рейтинг: 0 / 0
А где создание объекта
    #38760970
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychBarloneДаже не глядя в исходники QT, рискну предположить, что конструктор QMessageBox выделяет какую-то память в куче.а не пофигу ли пользователю класса, выделяет ли класс в куче чего то, или нет? Главное, чтоб удалял за собой )))
Опять для тех кто в танке и не читает сообщения - обсуждение в начале было про переполнение сегмента по сравнению с кучей и про потоко безопасность - вот тогда вот пользователю будет не пофиг
...
Рейтинг: 0 / 0
А где создание объекта
    #38760971
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychа не пофигу ли пользователю класса, выделяет ли класс в куче чего то, или нет? Главное, чтоб удалял за собой )))он где-то на предыдущей странице беспокоился, что стек переполнится :)
...
Рейтинг: 0 / 0
А где создание объекта
    #38760981
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Judo,
>> Опять для тех кто в танке и не читает сообщения
да я уже нить потерял, о чём ты споришь ))))
>> обсуждение в начале было про переполнение сегмента
брат, какого сегмента? ты создал объект на стеке, о переполнении стека надо думать, а он, как правило, большой. Мессаджбоксами его переполнить довольно сложно.

P.S. Там ещё Sheraton всех окончательно запутал своими "простыми объяснениями", конечно.
...
Рейтинг: 0 / 0
А где создание объекта
    #38761034
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneЕсли переменная объявлена внутри функции, то память под переменную будет автоматически выделена на стеке в момент выполнения этой строки кода, и освобождена автоматически при выходе из области видимости переменной.
Что скорее всего тоже не очень большой правдой )))
Если смотреть дизассемблером, то скорее всего память под все локальные переменные "выделится" в первой же строчке ф-ции

add sp, [размер_фрейма_под_локальные_переменные]

/возможно sub, не помню, откуда и куда растет стек. Возможно со старших адресов к младшим/

Когда они будут инициализированы ))), это уже другой вопрос.
JudoЕсть конкретная статья на QT где модератор говорит про сегмент стека.


Если Вы про эту цитату:
16632002
То, плохо зная английский, я бы предположил, что человек говорит о том, что СТАТИЧЕСКИМ МЕТОДАМ пофиг (!) как и где был выделена память под экземпляр. А вот для не статических, важно где размещен объект: "на стеке" или "в куче".
JudoЗдесь акцентируем внимание на слово complete.
Так вот либо у них модераторы глупые либо он реально весь целиком в стеке сидит

Модераторы возможно умные. Целиком в стеке.
[quot Judo]egorych...обсуждение в начале было про переполнение сегмента по сравнению с кучей и про потоко безопасность - вот тогда вот пользователю будет не пофиг
1. Ну... придется докупить еще памяти в компьютер... Правда, чем в этом случае может помочь куча, не очень понятно )))
2. Тема потоко-безопасности не раскрыта. Объект не является статическим (что это Вам и пытались объяснить), т.ч. к потокам это не имеет никакого значения.

IMHO
...
Рейтинг: 0 / 0
А где создание объекта
    #38761103
Sheraton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНифига себе детали ... Это -- основы. Ты вот нагонишь всякой пурги, он-то книжек не читает, читает только форумы -- и будет всю жисть считать, что auto -- это static.

Не надо утрировать до такого уровня. Придет время узнает что такое auto и что такое static если вообще это понадобится, а пока для изучения, нечего забивать голову таким деталями.
...
Рейтинг: 0 / 0
А где создание объекта
    #38761104
Sheraton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Значит, плохая книга.

Ну конечно же, Стенли Липман вообще дурак, занимался какой-то ерундой вместе с Бьярном Страуструпом в начале 80-х.
А вот MasterZiv гораздо лучше знает С++ чем все эти пердуны, которые создали С++.
...
Рейтинг: 0 / 0
А где создание объекта
    #38761109
Sheraton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЕсть принципиальная разница.
Статические данные все непотокобезопасны (если, конечно, не TLS).
Автоматические (стековые) -- наоборот.

Потоки для новичка изучающего С++???? Да на С++ можно всю жизнь программировать и до потоков так и не дойти в виду отсутствия надобности.
...
Рейтинг: 0 / 0
А где создание объекта
    #38761120
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SheratonMasterZivЕсть принципиальная разница.
Статические данные все непотокобезопасны (если, конечно, не TLS).
Автоматические (стековые) -- наоборот.

Потоки для новичка изучающего С++???? Да на С++ можно всю жизнь программировать и до потоков так и не дойти в виду отсутствия надобности.
Ты имел в виду использование Unix-processes вместо threads?
...
Рейтинг: 0 / 0
А где создание объекта
    #38761125
BagaBaga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дорогой мой Judo,
да вы тролль обыкновенный. Ничем иным нельзя объяснить ваше маниакальное желание приписать человеку бредовое утверждение и требовать его доказательства.

Ложь №1.
Именно вы утверждаете, что QT создаст статический объект, и при том глобальный статический объект: "я ожидал что статический стековый объект - будет глобальным ". Но постоянно приписываете это ни в чём не повинному модератору форума QT и даже обвиняете, что он несёт бред.

Ложь №2.
JudoНа кой черт мне сдался этот левый код. Еще раз - в третий раз - речь идет о конкретном файле QMessageBox
Где в нем - по вашему мнению - статический метод (бред какой-то) - который отвечает за создание уже в моей проге QMessageBox msg. Если это метод то звучит как полная чушь.
Кусок кода приведите из модуля QMessageBox.h ? а не этот левый код
Это твой бред. И не надо мне его приписывать. Я за этот бред не подписывался.

Ложь №3.
JudoОпять для тех кто в танке и не читает сообщения - обсуждение в начале было про переполнение сегмента по сравнению с кучей и про потоко безопасность - вот тогда вот пользователю будет не пофиг

Вопрос первого топика звучал так
JudoВозник вопрос как это тогда работает без создания объекта, т.е. мы имеем просто ссылку msgBox а объекта нет ?

Т.е. вопрос лежал в плоскости вашего непонимание основ С++: понятия конструктора и деструктора, порядка их вызова при создании экземпляра класса.
...
Рейтинг: 0 / 0
А где создание объекта
    #38761135
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я конечно извиняюсь, но называть "статическими" переменные не являющимися такими - это бред

Лично я, когда изучал программирование в школе, мы СНАЧАЛА проходили обычные переменные, а уже потом указатели и кучу (даже, не уверен, что школьный курс программирования так далеко заходил). О статических переменных (что под этим словом подразумевается в C), лично я, даже вообще не думаю. У меня в коде статических переменных раз, два и все.

Переворачивать все с ног на голову и заявлять, что "есть куча, а все что не в куче это .... и так проще понять", мне кажется глупой идеей. Есть просто переменная имеющая значение, есть указатель, который значение не хранит, а хранит ссылку и память выделяется вручную с помощью вызова new. Все и так крайне просто. И ничего придумывать для "упрощения" не нужно. Если не страдать "хибернейтом головного мозга".

IMHO & AFAIK
...
Рейтинг: 0 / 0
А где создание объекта
    #38761138
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SheratonНу конечно же, Стенли Липман вообще дурак
Между "знать" и "уметь доходчиво объяснить" - дистанция огромного размера. Даже если не
принимать во внимание (не)адекватность переводчиков.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
А где создание объекта
    #38761148
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JudoBagaBagaГде вы увидели здесь статический объект? Здесь вам явно говорят - статический метод ("static method").
Смотри:
[src c++]
class A{
public:
...
На кой черт мне сдался этот левый код. Еще раз - в третий раз - речь идет о конкретном файле QMessageBox
Где в нем - по вашему мнению - статический метод (бред какой-то) - который отвечает за создание уже в моей проге QMessageBox msg. Если это метод то звучит как полная чушь.
Кусок кода приведите из модуля QMessageBox.h ? а не этот левый код

Ты удивишься, но такого кода в природе нет.
...
Рейтинг: 0 / 0
А где создание объекта
    #38761149
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevЕсть просто переменная имеющая значение, есть указатель, который
значение не хранит, а хранит ссылку и память выделяется вручную с помощью вызова new. Все
и так крайне просто.
Вот именно из-за этой простоты и непонятно: с чего ТС решил, что у него переменная это
указатель.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
А где создание объекта
    #38761153
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JudoBarloneА если переменная объявлена внутри функции, то в момент выполнения этой строки кода.
Barlone, В каком сегменте память будет выделена?

в сегменье стека.
...
Рейтинг: 0 / 0
А где создание объекта
    #38761155
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychJudo, ты этого хотел? Или о чём ты уже 3ю страницу споришь со всеми подряд?

Он спорит, что нужно читать: форумы или учебники.
...
Рейтинг: 0 / 0
А где создание объекта
    #38761164
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevЕсли Вы про эту цитату:
16632002
То, плохо зная английский, я бы предположил, что человек говорит о том, что СТАТИЧЕСКИМ МЕТОДАМ пофиг (!) как и где был выделена память под экземпляр. А вот для не статических, важно где размещен объект: "на стеке" или "в куче".
JudoЗдесь акцентируем внимание на слово complete.
Так вот либо у них модераторы глупые либо он реально весь целиком в стеке сидит




Там, в форуме по QT, весь вопрос человека сводится к "Я тут вызываю QMessageBox, всё хорошо работает, но я не понимаю, где же чёрт побери new ?"

Ровно к тому же самому сводится и вопрос стартера данного топика.

Оба не читали элементарных книжек.
...
Рейтинг: 0 / 0
А где создание объекта
    #38761165
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SheratonMasterZivЗначит, плохая книга.

Ну конечно же, Стенли Липман вообще дурак, занимался какой-то ерундой вместе с Бьярном Страуструпом в начале 80-х.
А вот MasterZiv гораздо лучше знает С++ чем все эти пердуны, которые создали С++.

Знаешь, очень даже может быть...
...
Рейтинг: 0 / 0
А где создание объекта
    #38761169
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, подводим итоги .

Judo, ты всё понял , или ещё что-то осталось непонятным ?
...
Рейтинг: 0 / 0
А где создание объекта
    #38761172
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

MasterZivSheratonпропущено...


Ну конечно же, Стенли Липман вообще дурак, занимался какой-то ерундой вместе с Бьярном Страуструпом в начале 80-х.
А вот MasterZiv гораздо лучше знает С++ чем все эти пердуны, которые создали С++.


Знаешь, очень даже может быть...

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

Аналогично, мне очень понравилась фраза в книге Гради Буча "Объектно ориентированный анализ и программирование". Смысл примерно был такой:
мы делали систему управления персоналом (!!!) для большой корпорации, людей мы завели в список и выяснили (!!!), что корпорация очень большая и памяти нам не хватает
После этого, хочется закрыть книжку и воскликнуть: "чувак! ты про СУБД слышал?"
...
Рейтинг: 0 / 0
А где создание объекта
    #38761178
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю закрыть ветку. Мне кажется всем уже всё ясно.
...
Рейтинг: 0 / 0
А где создание объекта
    #38761182
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну сейчас дождёмся "ОК" от топикстартера, и закроем (или сама закроется).
...
Рейтинг: 0 / 0
А где создание объекта
    #38761185
Sheraton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я предлагаю Judo такую трактовку: "В С++ объекты могут быть размещены либо статически - во время компиляции, либо динамически - во время выполнения программы..." А потом когда Judo освоится в С++, можно расширить понятие "статически", на собственно статически и автоматически. Иначе, наслушавшись мнения местных гуру, Judo с перепугу убежит в Java/С# и от туда будет ругать С++ в каждой ветке форума и говорить, что С++ вчерашний день, для бородатых, прокуренных маньяков в толстых вязанных свитерах.
...
Рейтинг: 0 / 0
А где создание объекта
    #38761194
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sheratonможно расширить понятие "статически", на собственно статически и
автоматически.
Вообще-то это "динамически" придётся расширять на "автоматически" и "собственно
динамически"...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
А где создание объекта
    #38761205
Фотография Judo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SheratonЯ предлагаю Judo такую трактовку: "В С++ объекты могут быть размещены либо статически - во время компиляции, либо динамически - во время выполнения программы..." А потом когда Judo освоится в С++, можно расширить понятие "статически", на собственно статически и автоматически. Иначе, наслушавшись мнения местных гуру, Judo с перепугу убежит в Java/С# и от туда будет ругать С++ в каждой ветке форума и говорить, что С++ вчерашний день, для бородатых, прокуренных маньяков в толстых вязанных свитерах.

Давно уже написал что пора закрыть - еще на первой странице
авторAnatoly Moskovsky
+1

Но набежали, начали, флудить ....
Тогда повторно предложил закрыть уже на третьей странице
авторОтвет нашел здесь:
Там он был всего в два ответа. Здесь же нафлудили...
И все равно кто то не удержался чтобы показать себя гением в элементарных вещах.

И вот ты предлагаешь сейчас в третий раз уже закрыть тему, но снова кто нибудь не удержится сверкнуть своими знаниями в простейших вещах
Dimitry SibiryakovSheratonможно расширить понятие "статически", на собственно статически и
автоматически.
Вообще-то это "динамически" придётся расширять на "автоматически" и "собственно
динамически"...


И теперь снова набежит толпа вменяющая раз уж это простейшие вещи к чему вопрос?
И снова придется отвечать что я давно уж сколько лет С++ не пользовал, а другими вещами занимался,
Из которых Sibiryakov в курсе по моим топикам только про Delphi.

SheratonJudo с перепугу убежит в Java/С# и от туда будет ругать С++ в каждой ветке форума и говорить, что С++ вчерашний день, для бородатых, прокуренных маньяков в толстых вязанных свитерах
И снова подтвердится, что флуд на четыре страницы, есть вещь нормальная
И не зря я убегу на stackoverflow и oracle java forum.
Потому что как ты написал прокуренных маньяков - демонстрирующих свое хамство - я устал.
Продолжайте лить его еще дальше и раздуйте хоть на десять страниц.
Видать это и есть специфика русского характера.
Мне (все точка) - комментировать очередного гения (по его мнению) - надоело.
Bye. Можете дальше продолжать флуд в этом топике
...
Рейтинг: 0 / 0
А где создание объекта
    #38761206
Sheraton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВообще-то это "динамически" придётся расширять на "автоматически" и "собственно
динамически"...


Опять 25. Я принял трактовку из книги Стенли Липмана "Язык программирования С++. Вводный курс" Издательство "Невский Диалект", 2003 год. на странице 50. Там сформулировано просто и понятно.

Все эти разделения на "автоматически-статически" только путают изучающих С++ проще говоря демагогия.

В книге Бьерна Страуструпа "Язык программирования С++. Специальное издание." Издательство "Бином"-"Невский Диалект" 2001 года.
Такие детали как "Статическая-автоматическая-свободная память (динамическая или куча)" вообще вынесены за рамки книги в Приложение В. "Технические подробности" (страница 920), дабы не забивать голову изучающим С++ всякой чепухой.
...
Рейтинг: 0 / 0
А где создание объекта
    #38761211
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sheraton & Dimitry,

Вы в какой то лес залезаете.

Есть переменная. Она может хранить: int, char, double, объекты какие-то etc..., в общем _значения_, либо указатель (что тоже в принципе является значением). Если она хранит указатель, то программист должен явно выделить память под данные и/или получить откуда-то (библиотека, ОС) ссылку на уже готовый объект.

А еще, объекты можно сохранять (сериализовать?) в файл... и хранить на диске... )))

Термин "статически", IMHO, предполагается то, что написано "static". Переменная в функции, без данного ключевого слова, статической являться по определению не может. Ну и термин "динамически" я обычно тоже видел только в контексте heap. Уверять, что переменные на стеке "динамические", мне тоже кажется немного не очевидно.
...
Рейтинг: 0 / 0
А где создание объекта
    #38761228
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SheratonВ книге Бьерна Страуструпа...
Данного товарища читал в 98 году. Он предполагал, что люди читающие его книгу знают ОСНОВЫ языка C.

Все же, C++ это расширение C. Если не брать в расчет проблем производительности, то можно такими вещами голову себе не забивать. Все передавать by value. Конструктор копирования for ever. А вот если о производительности задумываться... то тут действительно начинается чехарда. Указатели vs ссылки, место где выделен объект, время жизни объекта и так далее.

Но "простым" объяснением, тут все равно не отделаешься. Или человек должен это понимать или, по результату, он будет задавать глупые вопросы. Но и начинать лучше на с "где выделен объект"... а C... понимать разницу между переменной, хранящей значение, и указателем. А так же передача параметров by value, by reference.

Иначе, действительно наступит чехорда. Вот лично я вообще не понимаю, зачем данный товарищ ввел в язык понятие reference (Object &x). Что бы всех запутать? Раньше, смотря на вызов метода, всегда было понятно, как передается переменная by value или by reference. И это было хорошо! Теперь - фиг поймешь. Наверное тоже хотел упростить жизнь. IMHO
...
Рейтинг: 0 / 0
А где создание объекта
    #38761239
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevзачем данный товарищ ввел в язык понятие reference (Object &x). Что бы всех запутать?
Чтобы ввести тип результата для операции разыменования.
Без этого невозможно было реализовать множество фич С++, например перегрузку операторов, выведение типов в шаблонах.
А то что вы считаете непонятным, другой может посчитать более понятным :)
...
Рейтинг: 0 / 0
А где создание объекта
    #38761408
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SheratonОпять 25. Я принял трактовку из книги Стенли Липмана "Язык программирования С++. Вводный курс" Издательство "Невский Диалект", 2003 год. на странице 50. Там сформулировано просто и понятно.Товарищу Липману гореть в аду. Либо гореть в аду переводчику. Потому что написано просто, понятно и неправильно.

SheratonВсе эти разделения на "автоматически-статически" только путают изучающих С++ проще говоря демагогия.Это особенности языка которые надо понимать. Хотя если ты считаешь это демагогией, ну тогда будь последовательным и не обращай внимания на светофоры и дорожные знаки. А то ишь понапридумывали табличек и лампочек бессмысленных...

SheratonВ книге Бьерна Страуструпа "Язык программирования С++. Специальное издание." Издательство "Бином"-"Невский Диалект" 2001 года.
Такие детали как "Статическая-автоматическая-свободная память (динамическая или куча)" вообще вынесены за рамки книги в Приложение В. "Технические подробности" (страница 920), дабы не забивать голову изучающим С++ всякой чепухой.А приложение это по твоему не часть книги?
...
Рейтинг: 0 / 0
А где создание объекта
    #38761520
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JudoДавно уже написал что пора закрыть - еще на первой странице
авторAnatoly Moskovsky
+1

Но набежали, начали, флудить ....
Тогда повторно предложил закрыть уже на третьей странице
авторОтвет нашел здесь :
Там он был всего в два ответа. Здесь же нафлудили...

Ещё раз, там НЕПРАВИЛЬНО ответили. В обоих случаях память выделяется во время исполнения программы.
...
Рейтинг: 0 / 0
96 сообщений из 96, показаны все 4 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / А где создание объекта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]