Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2010, 14:05   #1
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию Конструктор копирования TBitmap

Доброго времени суток!
Что-то не любит меня TBitmap, одни сплошные проблемы с ним (хотя и не всегда из-за него самого). Итак, на этот раз я не могу понять - что с его конструктором копирования? Набросал простенький примерчик в шестом билдере:
Код:
Graphics::TBitmap * image1, * image2;

void __fastcall TForm1::Button1Click(TObject *Sender)
{
image1 = new Graphics::TBitmap;
image1 -> LoadFromFile("D:\\Gate.bmp");
Form1 -> Canvas -> Draw(10, 10, image1);
}

void __fastcall TForm1::Button2Click(TObject *Sender)
{
image2 = new Graphics::TBitmap(*image1);
Form1 -> Canvas -> Draw(110, 20, image2);
delete image1;
Form1 -> Canvas -> Draw(210, 30, image2);
}
Сначала нажимаю кнопку 1, потом кнопку 2. image1 нормально рисуется, потом один раз нормально рисуется image2, а второй раз - ничего подобного. Пустое место.
Не могу понять - в чем дело?? Это он что ли пытается по-умному выделять память? Похвально, но почему тогда он так по-тупому ее освобождает?
Объясните кто-нибудь неразумному - это баг или фича? И что мне теперь, вместо конструктора копирования теперь CopyRect делать вместе с копированием прочих основных параметров?
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 11.10.2010, 14:31   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Цитата:
Это он что ли пытается по-умному выделять память?
не знаю билдеров, но скорей всего в конструкторе копирования указывается на ту же саму область памяти

Цитата:
Похвально, но почему тогда он так по-тупому ее освобождает?
вместо delete какой нить image->free надо небось.
достоверными эти предположения считать нельзя

если хочешь просто скопировать картинку, используй assign
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 11.10.2010, 14:52   #3
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

pproger, похоже, Assign работает! Спасибо!
Еще один из многочисленных косяков дельфийской библиотеки в плюсах...
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 11.10.2010, 15:08   #4
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Возможно, тупой вопрос, но "второй раз" - это повторное нажатие кнопки 2, без нажатия кнопки 1?
f.hump вне форума Ответить с цитированием
Старый 11.10.2010, 15:13   #5
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Нет, это вторая строчка с рисованием в одном и том же нажатии, т.е. уже после удаления image1.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конструктор копирования. 123er4 Общие вопросы C/C++ 4 13.06.2010 01:27
Конструктор копирования Superlotles Общие вопросы C/C++ 2 24.05.2010 17:39
Оптимизируем return объекта; конструктор копирования Kn793 Общие вопросы C/C++ 2 24.04.2010 20:26
проблема копирования из image.canvas в переменную TBitMap h4muk Мультимедиа в Delphi 2 27.02.2009 09:44
Конструктор копирования Djaconda Общие вопросы C/C++ 3 11.06.2008 18:54