Vlad Drakula |
11-06-2006 18:48 449527 |
создание BRUSH в С++ WinAPI
обнаружил следующую проблему:
если в цикле присваивать переменной цикла значение которое получено с помощью макроса "color" то в приложении обязательно случается глюк... и причем именно из за этого...
из-за чего такое происходит???
|
dmitryst |
12-06-2006 14:27 449731 |
Vlad Drakula Может, орфографию поправить? ;)
|
Vlad Drakula |
12-06-2006 14:35 449736 |
dmitryst
а вы аответ знаете на мой вопрос?
|
dmitryst |
12-06-2006 14:40 449738 |
Vlad Drakula Вообще-то, я и вопрос не совсем понял :tease: . Кто есть "color", как вы получаете от него какое-то значение? И для чего именно так?
|
Vlad Drakula |
12-06-2006 14:56 449745 |
dmitryst
вот такой код:
HBRUSH brush = CreateSolidBrush(RGB(0, 0, 0));
|
Ты не забываешь, потом ненужные кисти удалить?
|
dmitryst |
12-06-2006 17:48 449782 |
ivank А, точно! Хотя, они ж вроде, сами должны destructe?
|
Vlad Drakula |
13-06-2006 15:40 450096 |
ivank
а вот нам не один из преподов не разу не сказал что его еще и удалять нужно...
|
dmitryst |
13-06-2006 16:31 450131 |
Vlad Drakula
Цитата:
а вот нам не один из преподов не разу не сказал что его еще и удалять нужно...
|
:laugh: Серьёзно? А я это еще в какой-то древней книжке по С читал, но почему-то помню, что в С++ кисти удаляются при создании новой кисти автоматически. И что, помогло? Работает?
|
Vlad Drakula |
13-06-2006 16:43 450140 |
dmitryst
да!
Цитата:
А я это еще в какой-то древней книжке по С читал, но почему-то помню, что в С++ кисти удаляются при создании новой кисти автоматически. И что, помогло? Работает?
|
теоретически наверное быть этого не может... т.к. скорее всего там выделяется память, а удалить ее можно только если получить значение этой переменной, а в функцию она не передается, значит и очистить память не возможно!
|
dmitryst |
13-06-2006 17:13 450155 |
Vlad Drakula Не зря в PERL придумали "сборку мусора" :), убирать за ленивыми программистами :). В итоге, у вас заработало как надо?
|
Vlad Drakula |
13-06-2006 17:46 450174 |
dmitryst
Цитата:
В итоге, у вас заработало как надо?
|
да, я просто теперь из все инициализирую пи загрузке приложения...
Цитата:
Не зря в PERL придумали "сборку мусора" , убирать за ленивыми программистами .
|
по моему это ввели замного до появления этого языка... и не только в нем... ктомуже есть компромис между скоростью и требования к уровню програмиста...
|
dmitryst |
13-06-2006 18:09 450183 |
Vlad Drakula Про "мусор" - это к удобству работы. Но, конечно, правильнее - выделить память под ресурс, создать ресурс, удалить ресурс и освободить память. Ручками. Ну да ладно, главное - заработало, с чем и поздравляю. :)
|
Тов. программеры, не путайте библиотеки высокого уровня с WinAPI. Первые всё за собой чистят, и делают правильно, вторые - быстро. Лично я сторонник чистки мусора в деструкторе (I LOVE C++). Кисти автоматически удаляются в VCL но не WinAPI. Пример:
Код:
// всегда будет работать правильно
class TBrush
{
HBRUSH fhandle;
TBrush(const TBrush&);
public:
TBrush(int color=0) : fhandle(CreateSolidBrush(color))
{
}
~TBrush()
{
DeleteObject(fhandle);
}
void operator=(int color)
{
DeleteObject(fhandle);
fhandle = CreateSolidBrush(color);
}
}
|
Время: 12:45.
© OSzone.net 2001-