Russian Qt Forum

Разное => Говорилка => Тема начата: sq_vasya от Август 25, 2010, 16:38



Название: QObject и memory leaks
Отправлено: sq_vasya от Август 25, 2010, 16:38
Всем привет.

Столкнулся с проблемой утечки памяти в своём приложении. После долгих мучений пришёл к вырожденому случаю, который даёт утечки.

Код:
    int objectsAmount = 300;
    QVector<QObject*> objectsVector;
    objectsVector.resize( objectsAmount );

    __LEAKS_CHECK_START;

    for ( int i = 0; i < objectsAmount; i++ )
        {
        QObject* object = new QObject;
        objectsVector.append( object );
        }

    for ( int i = 0; i < objectsAmount; i++ )
        {
        delete objectsVector.at( i );
        }

    int res = 0;

    __LEAKS_CHECK_END;

данный код вставленный в только что сгенерированное визардом приложение даёт 600 убежавших ячеек.
Для проверки утечек использую

Код:
#define __LEAKS_CHECK_START \
    TInt cellsCountStart = User::CountAllocCells(); \
    qDebug( "cellsCountStart = %d", cellsCountStart ); \

#define __LEAKS_CHECK_END \
    TInt cellsCountEnd = User::CountAllocCells(); \
    qDebug( "cellsCountEnd = %d", cellsCountEnd ); \
    if ( (cellsCountEnd - cellsCountStart) == KLeaksAllowable ) \
        qDebug( "No memory leaks detected" ); \
    else \
        qDebug( "%d memory leaks detected", cellsCountEnd - cellsCountStart - KLeaksAllowable );
работает только для Symbian.

Кто нибудь может мне объяснить, куда девается память и что нужно делать, чтобы она не текла?


Название: Re: QObject и memory leaks
Отправлено: sq_vasya от Август 25, 2010, 16:39
если вместо QVector::resize() использовать QVector::reserve(), то получаю 258 убежавших ячеек.


Название: Re: QObject и memory leaks
Отправлено: Авварон от Август 25, 2010, 17:39
в вектор, куда же еще...


Название: Re: QObject и memory leaks
Отправлено: sq_vasya от Август 25, 2010, 18:12
в вектор, куда же еще...

Не согласен... Для чистоты эксперимента вынес вектор и работу с ним в отдельную ф-ию. Плюс разместил вектор на хипе и по честному удалил ручками. Результат не изменился.

Код:
void JustDoIt()
    {
    int objectsAmount = 300;
    QVector<QObject*>* objectsVector = new QVector<QObject*>;
    objectsVector->reserve( objectsAmount );

    for ( int i = 0; i < objectsAmount; i++ )
        {
        QObject* object = new QObject;
        objectsVector->append( object );
        }

    for ( int i = 0; i < objectsAmount; i++ )
        {
        delete objectsVector->at( i );
        }

    objectsVector->clear();
    delete objectsVector;
    }

int main(int argc, char *argv[])
    {

    __LEAKS_CHECK_START;

    JustDoIt();

    __LEAKS_CHECK_END;

    return 0;
    }

ещё какие будут идеи, господа?


Название: Re: QObject и memory leaks
Отправлено: Alex Custov от Август 25, 2010, 18:27
1) Как ты думаешь, сколько элементов в векторе будет после выполнения этого кода?

Код:
    int objectsAmount = 300;
    QVector<QObject*> objectsVector;
    objectsVector.resize( objectsAmount );

    for ( int i = 0; i < objectsAmount; i++ )
    {
        QObject* object = new QObject;
        objectsVector.append( object );
    }

Варианты:

  • 300
  • 600

2) Как ты думаешь, что будет удалять оператор delete, исходя из предыдущего ответа?



Название: Re: QObject и memory leaks
Отправлено: JamS007 от Август 25, 2010, 18:51
Alex Custov, опередили Вы меня...

QVector::reserve() - резервирует место в векторе, то есть создает в вашем случае 300 элементов.
А потом вы добавляете еще 300 элементов. После чего удаляете их... А остальные элементы, то есть, те что остались после reserve() не удаляете.


Название: Re: QObject и memory leaks
Отправлено: sq_vasya от Август 25, 2010, 18:53
1) Как ты думаешь, сколько элементов в векторе будет после выполнения этого кода?

Код:
    objectsVector.resize( objectsAmount );

Варианты:

  • 300
  • 600
именно этого - 600.

Цитировать
2) Как ты думаешь, что будет удалять оператор delete, исходя из предыдущего ответа?
я бы на его месте сломался с кодом KERNEL-EXEC 3. Хотя нет, если там забито NULL-ами, то оператор delete корректно это отработает.

Дальше.

Цитировать
если вместо QVector::resize() использовать QVector::reserve(), то получаю 258 убежавших ячеек.
Это раз.

Цитировать
Код:
void JustDoIt()
    {
    int objectsAmount = 300;
    QVector<QObject*>* objectsVector = new QVector<QObject*>;
    objectsVector->reserve( objectsAmount );
...
Это два. Именно reserve а не resize.

Да, прошу прощения, немного ввёл в заблуждение, но если читать внимательно, то всё корректно (на мой взгляд, поправте, если я ошибаюсь).  "Ответ #3" как по мне вполне себе рабочий и указанную ошибку не содержит.


Название: Re: QObject и memory leaks
Отправлено: JamS007 от Август 25, 2010, 18:57
Вы храните вектор указателей на объект, а не вектор объектов. clear() удаляет все из вектора, то есть указатели, не удаляя объекты, на которые они указывают. И даже то, что Вы удаляете сам вектор не приводит к удалению элементов из памяти, повторюсь, вы сохраняете указатели на них, а не сами элементы. При удалении вектора исчезнут указатели, а элементы останутся.


Название: Re: QObject и memory leaks
Отправлено: sq_vasya от Август 25, 2010, 18:57
Если мне не верите, то можете попробовать прологировать размер вектора.

Код:
    for ( int i = 0; i < objectsAmount; i++ )
        {
        QObject* object = new QObject;
        objectsVector->append( object );
        qDebug( "objectsVector->size() = %d", objectsVector->size() );
        }

будет от 1 до 300. Проверял.


Название: Re: QObject и memory leaks
Отправлено: sq_vasya от Август 25, 2010, 19:00
Вы храните вектор указателей на объект, а не вектор объектов. clear() удаляет все из вектора, то есть указатели, не удаляя объекты, на которые они указывают. И даже то, что Вы удаляете сам вектор не приводит к удалению элементов из памяти, повторюсь, вы сохраняете указатели на них, а не сами элементы. При удалении вектора исчезнут указатели, а элементы останутся.

Я осознаю, что храню в векторе уазатели на объекты. Эти объекты я удаляю кодом
Код:
for ( int i = 0; i < objectsAmount; i++ )
        {
        delete objectsVector->at( i );
        }

а
Код:
objectsVector->clear();
вызываю для очистки совести. На результат это всё равно не влияет.


Название: Re: QObject и memory leaks
Отправлено: Rcus от Август 25, 2010, 19:16
Хм... QVector использует qMalloc -> ::malloc -> User::Alloc() -> RHeap::Alloc (очень просто аллокатор памяти, но там есть трассировка выделенных кусков)
не понимаю что тут может быть не так. А какие результаты даёт выполнение функции несколько раз? По идее если количество памяти стабилизируется то это не страшно. Под GNU/Linux-x86_64 Valgrind тоже пугает LEAK SUMMARY: still reachable: 18,608 bytes in 270 blocks, но детали все ставят на место.


Название: Re: QObject и memory leaks
Отправлено: Пантер от Август 25, 2010, 19:20
const T & QVector::at ( int i ) const
?


Название: Re: QObject и memory leaks
Отправлено: Sancho_s_rancho от Август 25, 2010, 20:18
const T & QVector::at ( int i ) const
?
Меня тоже это потрясло. Искать утечки памяти в языке и библиотеке, с которыми НЕ знаком. Вообще.


Название: Re: QObject и memory leaks
Отправлено: JamS007 от Август 25, 2010, 21:00
Вся проблема в том, что Вы выделяете память под 300 элементов, они все пустые. Они занимают место в диапазоне 0..299 Потом вы добавляете еще 300 элементов, уже инициализированных значениями, то есть 300 раз выделяете память. Но цикл удаления у вас не правильный, дело в том, что вы начинаете отсчет элементов от 0, а там у вас пустые указатели, соответственно delete нечего не удаляет. А другие 300 элементов так и остаются в памяти.

Если не прав - поправьте.


Название: Re: QObject и memory leaks
Отправлено: sq_vasya от Август 26, 2010, 00:46
const T & QVector::at ( int i ) const
?

Да, уважаемый именно так. Мало того, компилятор не то что ошибку, но даже ворнига не пишет. И это работает.

Меня тоже это потрясло. Искать утечки памяти в языке и библиотеке, с которыми НЕ знаком. Вообще.

Вас это будет потрясать до тех пор, пока Вы не осознаете разницу между указателем на константу и константным указателем.

Перед тем, как отвечать на этот пост, пожалуйста покурите внимательно этот код
Код:
class A
    {
public:
    void NonConstMethod() {}
    };

void main()
    {
    QVector<A*> vectorA;
    A* a = new A;
    vectorA.append( a );
    vectorA.at( 0 )->NonConstMethod();
    delete a;
    }
Возможно, вы будете вновь потрясены, но компилятор примет данный код как вполне себе кошерный и ни в одном месте не выругается.

Далее, предлагаю покурить следующий фрагмент
Код:
class A
    {
public:
    void NonConstMethod() {}
    };

void main()
    {
    const A* a1 = (const A*)0x123123;
    a1 = (const A*) 0x111222;
    // a1->NonConstMethod();

    A* const a2 = (A*) 0x222333;
    // a2 = (A*) 0x444555;
    a2->NonConstMethod();
    }
Если Вы раскоментируете закоментированные строки - компилятор выдаст ошибку. Не поленитесь, вставьте этот код в IDE, скомпилируйте и запустите, возможно так Вы лучше проникнитесь сутью вопроса.

Также рекомендую вдумчиво почитать http://www.cap-design.ru/ccc/5.htm (http://www.cap-design.ru/ccc/5.htm) и обратить внимание на разделы "Указатель на константу" и "Константный указатель". Буду рад, если мои выкладки Вам будут полезны.

Далее, прошу не обсуждать этот момент в данном топике, поскольку он его прямо не касается. Если Вам интерестно это обсудить и найти истину, можете создать отдельный топик и там это обсуждать. Я с удовольствием присоединюсь к обсуждению.

Увожу далее разговор от QVector-a. Здесь много было скзано про методы QVector::reserve() и QVector::resize().
Ок, я их добавлял для того чтобы память под элементы выделялась только один раз (да, resize для этого не подходит и там возникает проблема, которую все озвучили несколько раз. внимательный читатель заметил, что я сразу же поправился и стал использовать метод reserve, который соответствует поставленной задаче).
Все. Отказываемся от их использования. Нету их.

Код:
void JustDoIt()
    {
    int objectsAmount = 300;
    QVector<QObject*>* objectsVector = new QVector<QObject*>;

    for ( int i = 0; i < objectsAmount; i++ )
        {
        QObject* object = new QObject;
        objectsVector->append( object );
        qDebug( "objectsVector->size() = %d", objectsVector->size() );
        }

    for ( int i = 0; i < objectsAmount; i++ )
        {
        delete objectsVector->at( i );
        }

    delete objectsVector;
    }

int main(int argc, char *argv[])
    {

    __LEAKS_CHECK_START;

    JustDoIt();

    __LEAKS_CHECK_END;

    return 0;
    }
Компилируем, запускаем и имеем снова ту же проблему "258 memory leaks detected".

Подчёркиваю, нарицаний на QVector у меня нет и использую я его исключительно ради удобства демонстрации проблемы. Я не думаю, что память течёт в векторе - мне не всё ясно с очищением памяти из-под QObject-a.

Увожу разговор от QVector-a совсем
Код:
void JustDoIt()
    {
    QObject* obj1 = new QObject;
    QObject* obj2 = new QObject;
    QObject* obj3 = new QObject;
    QObject* obj4 = new QObject;

    delete obj1;
    delete obj2;
    delete obj3;
    delete obj4;
    }
На выходе имеем "8 memory leaks detected". Т.е. проблема, как мне кажется, где-то с QObject-ом. Или это не проблема, а корректное поведение? Ткните меня носом в мануал, где это написано, а то я что-то не могу понять что происходит.

Напомню, что проверки делаю под Symbian эмулятор и девайс. Просто потому, что знаю как делать замеры выделенной памяти, чтобы искать утечки (методика отработана не на одном проекте и до последнего времени себя оправдывала). Если кто-то знает, как это программно делать на линуксе и на винде (а лучше всего вообще средствами самой Qt) скажите пожалуйста, буду благодарен.


Название: Re: QObject и memory leaks
Отправлено: Alex Custov от Август 26, 2010, 02:11
на линукс используют valgrind


Название: Re: QObject и memory leaks
Отправлено: eugene от Август 26, 2010, 07:16
Проверил на винде, память смотрел вручную через PE
Код:
    while(getchar()){
        printf("Create\n");
        QObject* obj1 = new QObject;
        QObject* obj2 = new QObject;
        QObject* obj3 = new QObject;
        QObject* obj4 = new QObject;
        printf("Delete\n");

        delete obj1;
        delete obj2;
        delete obj3;
        delete obj4;
    }
После первого прохода по циклу память замирает и больше не меняется


Название: Re: QObject и memory leaks
Отправлено: Sancho_s_rancho от Август 26, 2010, 07:32
Цитата: Sancho_s_rancho от Август 25, 2010,  20:18
Меня тоже это потрясло. Искать утечки памяти в языке и библиотеке, с которыми НЕ знаком. Вообще.

Вас это будет потрясать до тех пор, пока Вы не осознаете разницу между указателем на константу и константным указателем.
Константная ссылка - это константный указатель на константу. Я был невнимателен и не заметил. что в векторе лежат указатели. Понятно, что указатель мы не трогаем. Извините, я был невнимателен и НЕ прав.
Вместо удаления указателей в цикле можно просто сделать qDeleteAll(const Container & c).
По поводу утечек памяти: насколько я вижу никаких утечек нет. Скорее всего или утилита врет или Qt внутри выделив память однажды держит ее прозапас чтобы уменьшить кол-во операций выделения/освобождения.


Название: Re: QObject и memory leaks
Отправлено: sq_vasya от Август 26, 2010, 10:54
А какие результаты даёт выполнение функции несколько раз?

Очень хорошее замечание. Да, с увеличением количества создаваемых элементов размеры убегаемой памяти не изменяются. Из этого я делаю заключение, что это заслуга некой внутренней оптимизации самой Qt. Вопрос. Можно ли это каким-то образом отключить? Чтобы всё работало по честному?
Предваряя коментарии в духе, раз не течёт, то и проблемы нет, забей и не парься, хочу напомнить, что это вырожденный случай большой проблемы. В данный момент я занят поиском утечек памяти в большом проекте написаным не мной. Плюс к этому у меня нет опыта работы с Qt. В проекте достаточно много утечек и я хочу чётко понимать, что и где течёт, чтобы разработать стратегию пофикса и потом планомерно и безболезненно её внедрить в существующий проект с как можно меньшим колличеством головняка.

После первого прохода по циклу память замирает и больше не меняется

Да, из той же серии.


Название: Re: QObject и memory leaks
Отправлено: sq_vasya от Август 26, 2010, 11:06
Извините, я был невнимателен и НЕ прав.

Ничего страшного. Всегда рад помочь.


Название: Re: QObject и memory leaks
Отправлено: BRE от Август 26, 2010, 11:17
sq_vasya, а попробуй такой код:
Код
C++ (Qt)
void JustDoIt()
   {
   QObject* obj1 = new QObject;
   QObject* obj2 = new QObject;
   QObject* obj3 = new QTimer;
   QObject* obj4 = new QTimer;
 
   delete obj1;
   delete obj2;
   delete obj3;
   delete obj4;
   }
 
Сколько покажет leaks?

Думается мне это объект QMetaObject остается.


Название: Re: QObject и memory leaks
Отправлено: sq_vasya от Август 26, 2010, 11:34
sq_vasya, а попробуй такой код:
Код
C++ (Qt)
void JustDoIt()
   {
   QObject* obj1 = new QObject;
   QObject* obj2 = new QObject;
   QObject* obj3 = new QTimer;
   QObject* obj4 = new QTimer;
 
   delete obj1;
   delete obj2;
   delete obj3;
   delete obj4;
   }
 
Сколько покажет leaks?

"8 memory leaks detected"

По ходу, что бы не создавать, если оно унаследовано от QObject - будет такое поведение.

Цитировать
Думается мне это объект QMetaObject остается.
Я могу как-то повлиять на его существование?


Название: Re: QObject и memory leaks
Отправлено: BRE от Август 26, 2010, 11:42
Цитировать
Думается мне это объект QMetaObject остается.
Я могу как-то повлиять на его существование?
Ну, это только предположение...
Насчет повлиять, то нет. В Qt очень многое завязано на Meta-object system.


Название: Re: QObject и memory leaks
Отправлено: Igors от Август 26, 2010, 11:45
Предваряя коментарии в духе, раз не течёт, то и проблемы нет, забей и не парься, хочу напомнить, что ...
Резвый старт типа "У меня утечек не будет!" наблюдался не раз и не два на этом форуме. Вот только я ни разу не видел успешного финиша  :) Редко но иногда удается доказать что да, течет (особенно в UI). Еще реже удается найти причину. Ну и дальше-то что? Переделывать недра Qt? Это накладно хотя бы потому что нужна статическая сборка + надо чего-то доказывать с лицензированием + заботы с каждой новой версией Qt.

То что с утечками/непонятками приходится мириться задевает Ваше самолюбие - нормально! (мое тоже). Я не призываю наплевать на все утечки. Но более практично сосредоточиться на отлове утечек по вине самой программы и не ставить задачу типа "мой список утечек пуст" - это может оказаться недостижимо практически.



Название: Re: QObject и memory leaks
Отправлено: JamS007 от Август 26, 2010, 12:20
А тема то интересная... это что же получается, если выделить QObject динамически, то сразу две дырки открываются?
Код:
void JustDoIt()
    {
    QObject* obj1 = new QObject;
    QObject* obj2 = new QObject;
    QObject* obj3 = new QTimer;
    QObject* obj4 = new QTimer;
 
    delete obj1;
    delete obj2;
    delete obj3;
    delete obj4;
    }

Цитировать
"8 memory leaks detected"

Судя по коду - да. Кто-то знающий valgrind может это подтвердить? Или может это связано только с Symbian, напомню, ее поддержку добавили недавно, может тролли сами чего намудрили?

У меня еще возникает мысль, что этот метаобъект должен удалиться в следующем витке exec(), может такое быть?


Название: Re: QObject и memory leaks
Отправлено: BRE от Август 26, 2010, 12:37
Скорее всего это не утечка/дырка. Дальнейшей утечки памяти не происходит.
Скорее всего, при первом создании объекта, создается какой-то глобальный объект. Только пока не понятно какой.  :)
Я предположил, что это объект QMetaObject, но смотрю исходники и склоняюсь, что это не он.
Теперь думается мне...  :) что это при создании первого объекта QObject, создается глобальный пул мьютексов (QMutexPool).


Название: Re: QObject и memory leaks
Отправлено: JamS007 от Август 26, 2010, 12:56
Вот реакция valgrind на этот код:

Цитировать
LEAK SUMMARY:
==2141==    definitely lost: 0 bytes in 0 blocks
==2141==    indirectly lost: 0 bytes in 0 blocks
==2141==      possibly lost: 3,136 bytes in 29 blocks
==2141==    still reachable: 7,830 bytes in 115 blocks
==2141==         suppressed: 0 bytes in 0 blocks
==2141==
==2141== ERROR SUMMARY: 18 errors from 18 contexts (suppressed: 35 from 10)

Видимых утечек он не находит, но предполагает что они есть.
Кто может мне объяснить последнюю строку?


Название: Re: QObject и memory leaks
Отправлено: sq_vasya от Август 26, 2010, 13:12
Предваряя коментарии в духе, раз не течёт, то и проблемы нет, забей и не парься, хочу напомнить, что ...
Резвый старт типа "У меня утечек не будет!" наблюдался не раз и не два на этом форуме. Вот только я ни разу не видел успешного финиша  :) Редко но иногда удается доказать что да, течет (особенно в UI). Еще реже удается найти причину. Ну и дальше-то что? Переделывать недра Qt? Это накладно хотя бы потому что нужна статическая сборка + надо чего-то доказывать с лицензированием + заботы с каждой новой версией Qt.

То что с утечками/непонятками приходится мириться задевает Ваше самолюбие - нормально! (мое тоже). Я не призываю наплевать на все утечки. Но более практично сосредоточиться на отлове утечек по вине самой программы и не ставить задачу типа "мой список утечек пуст" - это может оказаться недостижимо практически.

Нет, я конечно в некотором смысле альтруист, но не до такой же степени, чтобы фиксить лики в самой Qt (хотя чисто гипотетически, таковая необходимость может возникнуть, но вероятность её возникновения ничтожно мала). Я очень надеюсь, что мне не придётся фиксить Qt. Оно мне сто лет не нужно, для этих целей нокиа держит штат специально обученных людей, вот пусть они и развлекаются, мне же этим заниматься недосуг.
Уточняю суть проблемы. Я не стремлюсь к полному отсутствию ликов. Просто в какой-то момент резко встала проблема, что приложение после пяти минут работы падает, поскольку заканчивается память на девайсе и система просто забивает жадное приложение, дабы не повадно было. Стали трейсить - нашли два с половиной ведра ликов, но я никак не могу толком разобраться, что же именно течёт, поскольку наши родные лики перемешаны с ликами самой Qt и, когда пытаешься сделать простенький пример, и локализовать лик очень хочется чётко понимать мой это лик или лик библиотеки. Мы уже давно смирились, что библиотека подтекает, но пришли к выводу, что она это делает не настолько сильно, чтобы создавать нам проблемы. Просто хочется отмежеваться от неё.

А тема то интересная...
Цитировать
"8 memory leaks detected"
Хочу отметить, что больше чем 258 ликов на подобном коде я не видел. Пробовал создавать хоть 300, хоть 3000, хоть 30000 объектов. Я так понимаю, что это некая внутрення то ли оптимизация, то ли трик, просто мне это мешает.


Название: Re: QObject и memory leaks
Отправлено: BRE от Август 26, 2010, 13:20
Я так понимаю, что это некая внутрення то ли оптимизация, то ли трик, просто мне это мешает.
IMHO, понимаю что мешает, только вряд-ли что-то можно будет сделать.
Qt активно использует глобальные объекты (sigletons), которые могут создаваться в любой момент.


Название: Re: QObject и memory leaks
Отправлено: sq_vasya от Август 26, 2010, 13:36
И ещё на тему альтруизма. Если писать нативное приложения для Symbian, то очень даже не сложно писать его без ликов. Вообще. Ни единого. Отчасти это обусловлено тем фактом, что многие системные вещи происходят в системных сервисах (серверах в терминах Symbian). Отчасти тем, что платформа достаточно хорошо спроектирована и протестирована (по крайней мере до версии 9.2 ИМХО). Зато на симбиане своих приколов хватает )) Понимаю, что на других платформах всё по другому и есть свои сильные и слабые стороны. Ну, это я так. Just note.


Название: Re: QObject и memory leaks
Отправлено: niXman от Август 26, 2010, 16:18
еще в детских книжечках пишут о том, что хранить в контейнерах указатели, плохая привычка. для этого существуют самрт-поинтеры.


Название: Re: QObject и memory leaks
Отправлено: Sancho_s_rancho от Август 26, 2010, 18:00
еще в детских книжечках пишут о том, что хранить в контейнерах указатели, плохая привычка. для этого существуют самрт-поинтеры.
И как связаны контейнеры и умные указатели?
Если тебе надо 3 указателя хранить, то что ты будешь делать? а 10? А ежели их число меняется или неизвестно заранее? Да и никто не запрещает хранить список умных указателей, вместо обычных.

А нафига кутешники в своей документации приводят примеры наподобии этого?
Цитировать
QList<Employee *> list;
 list.append(new Employee("Blackpool", "Stephen"));
 list.append(new Employee("Twist", "Oliver"));
И делают функции наподобии qDeleteAll().


Название: Re: QObject и memory leaks
Отправлено: Пантер от Август 26, 2010, 18:05
Кстати, qDeleteAll избавляет от утечки?


Название: Re: QObject и memory leaks
Отправлено: niXman от Август 26, 2010, 20:32
Цитировать
И как связаны контейнеры и умные указатели?
не более чем new и динамическая память ;)

Цитировать
Если тебе надо 3 указателя хранить, то что ты будешь делать? а 10? А ежели их число меняется или неизвестно заранее?
может для начала научиться понимать мысль, и не выставлять себя ?%*;№(% ;)

Цитировать
А нафига кутешники в своей документации приводят примеры наподобии этого?
потому что они гуанЫ*. о чем я не раз писал. так же, дважды доказывал, что их "последователи" тоже гуанЫ*.


Название: Re: QObject и memory leaks
Отправлено: niXman от Август 26, 2010, 20:50
Цитировать
дважды доказывал
точнее - трижды. но последний случай пантер подтер(почему-то;) )


Название: Re: QObject и memory leaks
Отправлено: Sancho_s_rancho от Август 26, 2010, 21:10
Цитировать
И как связаны контейнеры и умные указатели?
не более чем new и динамическая память ;)

Цитировать
Если тебе надо 3 указателя хранить, то что ты будешь делать? а 10? А ежели их число меняется или неизвестно заранее?
может для начала научиться понимать мысль, и не выставлять себя ?%*;№(% ;)

Цитировать
А нафига кутешники в своей документации приводят примеры наподобии этого?
потому что они гуанЫ*. о чем я не раз писал. так же, дважды доказывал, что их "последователи" тоже гуанЫ*.
1)Контейнеры - это заумные массивы, оптимизированные под разные задачи.  Умные указатели - указатели, рулящие и педалищие временем жизни объекта. Например: программа переходит в другой режим и некоторые QAction надо сделать неактивными. Я беру QList<QAction*> и делаю Disabled. Ну и где тут ужас от использования указателей в контейнерах?
2)Если смысл какой-то тайный, то это не ко мне.
3)Я использую Qt и следую ее идеологии, т.к. было бы странно пытаться сделать из деталей велосипеда лыжные палки, см. пирровы победы. При этом я не птица или птичий помёт, я человек.
4) А будешь много умничать, я тебе снова поломаю твой он-лайн компилер. :D


Название: Re: QObject и memory leaks
Отправлено: Sahab от Август 26, 2010, 21:24
Sancho_s_rancho рили не понимаешь о чем идет речь? ... или так ... провокация?


Название: Re: QObject и memory leaks
Отправлено: niXman от Август 26, 2010, 21:31
Цитировать
И как связаны контейнеры и умные указатели?
не более чем new и динамическая память ;)

Цитировать
Если тебе надо 3 указателя хранить, то что ты будешь делать? а 10? А ежели их число меняется или неизвестно заранее?
может для начала научиться понимать мысль, и не выставлять себя ?%*;№(% ;)

Цитировать
А нафига кутешники в своей документации приводят примеры наподобии этого?
потому что они гуанЫ*. о чем я не раз писал. так же, дважды доказывал, что их "последователи" тоже гуанЫ*.
1)Контейнеры - это заумные массивы, оптимизированные под разные задачи.  Умные указатели - указатели, рулящие и педалищие временем жизни объекта. Например: программа переходит в другой режим и некоторые QAction надо сделать неактивными. Я беру QList<QAction*> и делаю Disabled. Ну и где тут ужас от использования указателей в контейнерах?
2)Если смысл какой-то тайный, то это не ко мне.
3)Я использую Qt и следую ее идеологии, т.к. было бы странно пытаться сделать из деталей велосипеда лыжные палки, см. пирровы победы. При этом я не птица или птичий помёт, я человек.
4) А будешь много умничать, я тебе снова поломаю твой он-лайн компилер. :D

1. опять мысль не уловили. уже систематичность.
2. читать пункт выше.
3. кто бы сомневался? ;)
4. там нечего ломать. все уже исправлено(разве что временные файлы). за что я вас поблагодарил.


Название: Re: QObject и memory leaks
Отправлено: niXman от Август 26, 2010, 21:33
Sancho_s_rancho рили не понимаешь о чем идет речь? ... или так ... провокация?
он, и "провокация"? :o
все знают кто настоящий провокатор ;D подпись выдает ::)


Название: Re: QObject и memory leaks
Отправлено: Sancho_s_rancho от Август 26, 2010, 22:02
Sancho_s_rancho рили не понимаешь о чем идет речь? ... или так ... провокация?
Никаких провокаций. Объясните доходчиво, ну для простых смертных.


Название: Re: QObject и memory leaks
Отправлено: niXman от Август 26, 2010, 22:04
Sancho_s_rancho рили не понимаешь о чем идет речь? ... или так ... провокация?
Никаких провокаций. Объясните доходчиво, ну для простых смертных.
объясняю: в теме обсуждается ситуация владения указателем. ты же привел в пункте 1), абсолютно противоположный пример.
кстати, не удивляюсь.


Название: Re: QObject и memory leaks
Отправлено: Sancho_s_rancho от Август 27, 2010, 06:35
Sancho_s_rancho рили не понимаешь о чем идет речь? ... или так ... провокация?
Никаких провокаций. Объясните доходчиво, ну для простых смертных.
объясняю: в теме обсуждается ситуация владения указателем. ты же привел в пункте 1), абсолютно противоположный пример.
кстати, не удивляюсь.
1)  "еще в детских книжечках пишут о том, что хранить в контейнерах указатели, плохая привычка." - это твои слова. Разница между хранить и управлять временем жизни есть?
2)Тема была об утечках памяти.
3)Только не надо бла-бла про то, что умные указатели - это единственное верное решение.


Название: Re: QObject и memory leaks
Отправлено: niXman от Август 27, 2010, 11:48
Sancho_s_rancho рили не понимаешь о чем идет речь? ... или так ... провокация?
Никаких провокаций. Объясните доходчиво, ну для простых смертных.
объясняю: в теме обсуждается ситуация владения указателем. ты же привел в пункте 1), абсолютно противоположный пример.
кстати, не удивляюсь.
1)  "еще в детских книжечках пишут о том, что хранить в контейнерах указатели, плохая привычка." - это твои слова. Разница между хранить и управлять временем жизни есть?
2)Тема была об утечках памяти.
3)Только не надо бла-бла про то, что умные указатели - это единственное верное решение.
да ты и в правду *&$*#&@


Название: Re: QObject и memory leaks
Отправлено: Пантер от Август 27, 2010, 11:50
niXman: Ты достал уже. Еще один недельный бан.


Название: Re: QObject и memory leaks
Отправлено: Sahab от Август 27, 2010, 13:13
а что это Вы, сударь, бана(на)ми раскидались... нервишки пошаливают?... может ссылку на пункт правил?


Название: Re: QObject и memory leaks
Отправлено: Igors от Август 27, 2010, 14:05
а что это Вы, сударь, бана(на)ми раскидались... нервишки пошаливают?... может ссылку на пункт правил?
Ничего он не раскидался, жаль только что всего на неделю. Модератор не обязан ничего аргументировать, тем более что бестолковый флуд и переход на личности очевидны. Такой форум неинтересно читать, и это должно пресекаться


Название: Re: QObject и memory leaks
Отправлено: Пантер от Август 27, 2010, 16:28
Sahab:
1. Было оскорбление участника форума.
2. Данный человек не в первый раз делает подобные вещи. Он не раз предупреждался и уже побывал в недельном бане.
3. Если ты с чем-то не согласен, почитай http://www.prog.org.ru/topic_9170_0.html
4. Если пункта 3 будет недостаточно, создай тему в разделе http://www.prog.org.ru/board_11_0.html и аргументируй свои претензии.


Название: Re: QObject и memory leaks
Отправлено: pastor от Август 27, 2010, 16:54
Ничего он не раскидался, жаль только что всего на неделю. Модератор не обязан ничего аргументировать, тем более что бестолковый флуд и переход на личности очевидны. Такой форум неинтересно читать, и это должно пресекаться

+1


Название: Re: QObject и memory leaks
Отправлено: SABROG от Август 27, 2010, 22:17
Ничего он не раскидался, жаль только что всего на неделю. Модератор не обязан ничего аргументировать, тем более что бестолковый флуд и переход на личности очевидны. Такой форум неинтересно читать, и это должно пресекаться

+1
А нах его прилепили кверху? О чем тут розговаривать? Начальство поставило решать задачу, ну пусть и решает. Может чего интерестного раскопает.


Название: Re: QObject и memory leaks
Отправлено: SABROG от Август 27, 2010, 22:27
niXman: Ты достал уже. Еще один недельный бан.
+1, вы уж извините, но поливать Qt помоями на форумах типа cyberforum и т.д. не дам. Давайте хотя бы дадим людям составить личное мнение о фреймворке, а не говорить нубам фразы типа "Сидел на Qt несколько лет и меня от него тошнит". Я тоже сидел на Qt 4 года и никаких подобных позывов нет. До этого сидел на masme, fasme, BCB, MSVC и такого удовольствия как программирование на Qt на них не испытывал.


Название: Re: QObject и memory leaks
Отправлено: pastor от Август 27, 2010, 22:53
А нах его прилепили кверху? О чем тут розговаривать?

Помоему это не ко мне. Я ж недумаю, что это следует из того, что я проплюсовал высказывание Igors.

ЗЫ: Тему отлепил. Мне тоже интересно из каких соображение она была прилеплена.


Название: Re: QObject и memory leaks
Отправлено: SABROG от Август 27, 2010, 23:05
Помоему это не ко мне.
Ты у нас Джедай, тебе и ответ держать.
(http://wakelingenglish2.files.wordpress.com/2009/01/clenched_fist.jpg)


Название: Re: QObject и memory leaks
Отправлено: postebatsO от Август 28, 2010, 06:58
всем хай! никсман беспокоит.
вот кто флудеры - без цели, без смысла. языками потрепать.

наверняка все знают, что этот форум для меня ради постебаться. никакой иной ценности он не содержит.
так же, многие задумывались над тем, почему больше всего вопросов о которых и подумать стыдно, задают именно на этом форуме.

по поводу санчо_сранчо - ну что тут скажешь.. ну дубень он. и он это знает. потому и пытается самоутвердится. спросите вы почему? - да перейдите по ссылке которая у него в подписи. ну вот, вы все поняли. рад за вас. ну разве взрослый человек станет о таком писать?! по большинству кода(примеров), среднему прогеру станет стыдно перед собой за то, что он этого не смог в доке вычитать, я не говорю уже о том чтоб не дай Бог, задать подобный вопрос на форуме!

далее..
по поводу игорса - типичный пример недокодера. я не говорю что он глуп/туп, нет! но кодер с него гавенный. если вы вдруг удивились, и при этом читаете иногда его посты - знайте, вы ничуть не лучше. пишет не на с++, а на Си с классами. банальный пример (http://www.prog.org.ru/index.php?topic=14210.msg92996#msg92996)

пантер - тот еще, непризнаный всеми(почему-то ;D ) кодер. смотрим на дату регистрации, на кол-во постов, и оцениваем смысловую нагрузку его постов. ого :o так вот чему его научил форум по qt! вопросы? - нет вопросов! потому и модератор. проехали...

саброг - ооо, я его посты на всеобразных форумах читаю уже года три. благо что не глупый(в плане qt). но! вы представьте себе мое удивление увидев это! (http://forum.vingrad.ru/forum/topic-307564.html) :o
он узнал умные слова!
Цитировать
синглтон
антипаттерн
Dependency Injection
синглтона Мейерса
...
он открыл для себя паттерны проектирования! он их даже пытается использовать! это ваще! и это произошло совсем недавно. полагаю, он купил умную книжку по с++. а три года на этом форуме, со шлем под мышкой, чему его научили? ;)
нравится ему qt? - конечно!

единственный реальный мэн на этом форуме - BRE. респект и уважуха тебе!

профили мои удалите.
всем пока ::)

зы
заскринил на память)


Название: Re: QObject и memory leaks
Отправлено: SABROG от Август 28, 2010, 08:20
но! вы представьте себе мое удивление увидев это! (http://forum.vingrad.ru/forum/topic-307564.html) :o
он узнал умные слова!
Цитировать
синглтон
антипаттерн
Dependency Injection
синглтона Мейерса
...
он открыл для себя паттерны проектирования! он их даже пытается использовать! это ваще! и это произошло совсем недавно. полагаю, он купил умную книжку по с++. а три года на этом форуме, со шлем под мышкой, чему его научили? ;)
нравится ему qt? - конечно!
Удивляться нужно. Но не потому, что я узнал про паттерны. Про них я знал давно. Тема была конкретно о Dependency Injection и звучали только одни советы - использовать синглтон. А тема то как раз была создана, чтобы от него избавиться.

а три года на этом форуме, со шлем под мышкой, чему его научили? ;)
А чему должны были научить? Интересные посты на программерских форумах, которые бы не дублировали информацию в интернете появляются очень редко.

вот кто флудеры - без цели, без смысла. языками потрепать.
Тему надо либо закрывать, либо чистить. Она по сути ни о чем.


Название: Re: QObject и memory leaks
Отправлено: pastor от Август 28, 2010, 09:55
Перенес пока в говорилку


Название: Re: QObject и memory leaks
Отправлено: Sahab от Август 28, 2010, 14:37
Цитировать
вы уж извините, но поливать Qt помоями на форумах
никто помоями не поливает... он пытается в своей манере показать, что Qt НЕ БОЛЕЕ чем инструмент... и не панацея от всего... но многие форумчане с пеной у рта доказывают какая это мега либа/фреймворк(...), забывая(или даже не зная) при этом, что пишут-то все-таки на плюсах... большая часть людей на этом форуме не ориентируются в том ЯЗЫКЕ, на котором они пишут... дайте им задание написать проект на плюсах, заберите у них Qt и ВСЁ ... как говорится "сушите вёсла, сэр".

мое, сугубо личное мнение, что в Qt нужно лезть, когда имеется хотя бы какой-то опыт в с++, STL, [win/nix]API ... и не воспринимать критику Qt, во многих моментах, кстати, обоснованную, как личное оскорбление.


Название: Re: QObject и memory leaks
Отправлено: Igors от Август 28, 2010, 16:11
что Qt НЕ БОЛЕЕ чем инструмент... и не панацея от всего... но многие форумчане с пеной у рта доказывают какая это мега либа/фреймворк(...), забывая(или даже не зная) при этом, что пишут-то все-таки на плюсах... большая часть людей на этом форуме не ориентируются в том ЯЗЫКЕ, на котором они пишут... дайте им задание написать проект на плюсах, заберите у них Qt и ВСЁ ... как говорится "сушите вёсла, сэр".

мое, сугубо личное мнение, что в Qt нужно лезть, когда имеется хотя бы какой-то опыт в с++, STL, [win/nix]API ... и
Хммм... ну здесь я со многим согласен. Когда высокоуровневые вещи изучаются вперед низкоуровневых, то получается, мягко говоря, "не гуд" , и, да, человек склонен переоценивать достигнутое :)  Но никто не может запретить людям изучать Qt потому что (на чей-то взгляд) они до этого "не доросли". Воевать с этой проблемой глупо.

не воспринимать критику Qt, во многих моментах, кстати, обоснованную, как личное оскорбление.
Та где ж Вы видели "обоснованную критику"? Покажите хоть ОДИН пример. Напротив, голословные утверждения (выдранные из книжек но не пережитые самим), разжигание взаимных обид и оскорблений, отвратительная привычка судить др. людей и выставлять им оценки (господь бог нашелся) - вот этого хоть пруд пруди - посмотрите хотя бы эту тему. "Таким не место.." (эх, жаль что времена парткомов прошли  :) )


Название: Re: QObject и memory leaks
Отправлено: Sahab от Август 28, 2010, 21:22
Цитировать
Но никто не может запретить людям изучать Qt потому что (на чей-то взгляд) они до этого "не доросли". Воевать с этой проблемой глупо.
физически не может... хотя стоило бы... поймет он/она через полгода и прийдется опять возвращаться к "баранам"
Цитировать
разжигание взаимных обид и оскорблений, отвратительная привычка судить др. людей и выставлять им оценки (господь бог нашелся)
субъективно... причем на совести модеров/админов... вот скажите где ЧЕТКОЕ ОПРЕДЕЛЕНИЕ матам/обидам/оскорблениям в правилах... кого-то может обитеть и оскорбить отправка к великому гуглю(что было не раз на этом форуме), а кого-то не возмутит и "мудак/сука/..." вот кстати "сука" - это мат или литературное словцо?)


Название: Re: QObject и memory leaks
Отправлено: serg_hd от Август 28, 2010, 22:23
niXman: Ты достал уже. Еще один недельный бан.
+1, вы уж извините, но поливать Qt помоями на форумах типа cyberforum и т.д. не дам. Давайте хотя бы дадим людям составить личное мнение о фреймворке, а не говорить нубам фразы типа "Сидел на Qt несколько лет и меня от него тошнит". Я тоже сидел на Qt 4 года и никаких подобных позывов нет. До этого сидел на masme, fasme, BCB, MSVC и такого удовольствия как программирование на Qt на них не испытывал.
угу, тоже сидел. Относительно недолго правда. Я думаю nixman не говорил бы то что говорил, если б продолжал сидеть в основном на Qt и дальше. Но щас он на бусте :), просто повезло человеку с проектом. Так что считаю что вины его нет, просто, как говорится, редкий характер.


Название: Re: QObject и memory leaks
Отправлено: Sahab от Август 28, 2010, 23:30
Qt он "трогал" когда еще 2-я кутя была... а буст полез именно из-за (он бы сказал "убогости") несовершенности Qt Framework


Название: Re: QObject и memory leaks
Отправлено: serg_hd от Август 29, 2010, 00:41
не думаю, что большинству обсуждаемых тут техпроблем подошло бы что-либо более удобное чем Qt. Согласен с большинством, что для своего круга задач Qt подходит как никакой другой фреймворк.


Название: Re: QObject и memory leaks
Отправлено: Sahab от Август 29, 2010, 00:50
большинство обсуждаемых тут "техпроблем"постов сводится к неумению людей искать в оффдоке.
не сомневаюсь в "удобности" Qt, однако повторюсь, кутефреймворк не решает ВСЕХ проблем, и к тому развращает
Цитировать
что для своего круга задач Qt подходит как никакой другой фреймворк.
?))улыбнуло
а Вы со многими фреймворками знакомы?  ::)


Название: Re: QObject и memory leaks
Отправлено: serg_hd от Август 29, 2010, 00:58
кутефреймворк не решает ВСЕХ проблем, и к тому развращает
Про ВСЕ проблемы тут и не говорили. На чём легче написать читалку/браузер/editor/и_т.п.? Тут насчёт буста я совсем не уверен. Так что каждой задаче своё.
а Вы со многими фреймворками знакомы?  ::)
Нет, не было подходящих для этого проектов. Но много наслышан, этого пока хватило.


Название: Re: QObject и memory leaks
Отправлено: Sahab от Август 29, 2010, 01:07
Цитировать
Про ВСЕ проблемы тут и не говорили. На чём легче написать читалку/браузер/editor/и_т.п.? Тут насчёт буста я совсем не уверен.
к чему это?... Вы не уловили сути?...
Цитировать
Согласен с большинством, что для своего круга задач Qt подходит как никакой другой фреймворк.
как Вы можете быть согласны с другими, только по их словам (я так понимаю фразу "много наслышан"), именно так Вы строете свое мнение?


Название: Re: QObject и memory leaks
Отправлено: serg_hd от Август 29, 2010, 01:13
Цитировать
Про ВСЕ проблемы тут и не говорили. На чём легче написать читалку/браузер/editor/и_т.п.? Тут насчёт буста я совсем не уверен.
к чему это?... Вы не уловили сути?...
Сути чего именно?

как Вы можете быть согласны с другими, только по их словам (я так понимаю фразу "много наслышан"), именно так Вы строете свое мнение?
Нет, своё мнение строю на оценках "проверенных" людей, а потом выбираю на чём остановиться. Это, как ни странно, позволяет сэкономить время.


Название: Re: QObject и memory leaks
Отправлено: Sahab от Август 29, 2010, 01:21
Цитировать
Сути чего именно?
Утомили... перечитайте заново...
Цитировать
Это, как ни странно, позволяет сэкономить время.
и как ... сэкономили?) ;)


Название: Re: QObject и memory leaks
Отправлено: serg_hd от Август 29, 2010, 01:28
Цитировать
Сути чего именно?
Утомили... перечитайте заново...
"Философия" программирования? Чем отличается С++ от "Си с классами"? Кто тут прогер, а кто нет? Стараюсь не забивать голову подобным мусором. Делаю свою работу, которая, кстати, неплохо получается и всем доволен. Нужен будет буст, шаблоны на каждом шагу, соблюдение паттернов, не соблюдение антипаттернов, и т.д. и т.п., тогда и вернусь к этому вопросу.

Цитировать
Это, как ни странно, позволяет сэкономить время.
и как ... сэкономили?) ;)
Ну конечно, иначе бы, наверно, помесячно глумился над каждым фреймворком отдельно. А время, как известно, деньги  ;)


Название: Re: QObject и memory leaks
Отправлено: Sahab от Август 29, 2010, 01:30
Цитировать
А время, как известно, деньги;)
Обратите, сударь внимание на эту Вашу же фразу...
Цитировать
Нужен будет буст, шаблоны на каждом шагу, соблюдение паттернов, не соблюдение антипаттернов, и т.д. и т.п., тогда и вернусь к этому вопросу.
я думаю это Вам не грозит


Название: Re: QObject и memory leaks
Отправлено: serg_hd от Август 29, 2010, 01:37
Цитировать
А время, как известно, деньги;)
Обратите, сударь внимание на эту Вашу же фразу...
Обратил ещё раз. И?

я думаю это Вам не грозит
а я думаю всё же грозит, причём не в столь отдалённом будущем :)


Название: Re: QObject и memory leaks
Отправлено: Пантер от Август 29, 2010, 21:09
никсман, прощай, мне будет не хватать твоей наглости и грубости.