powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / А где создание объекта
25 сообщений из 96, страница 2 из 4
А где создание объекта
    #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
25 сообщений из 96, страница 2 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / А где создание объекта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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