Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru

RusFAQ.ru: Программирование на C / C++

Выпуск № 613
от 23.10.2004, 10:10

Администратор:
Имя: Nick.Box
URL: Информационный ресурс
ICQ: 365124
[censored], [censored]
О рассылке:
Задано вопросов: 1985
Отправлено ответов: 3799
Активность: 191.3 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

DSota
Статус: Начальный
Общий рейтинг: 123.72
[Подробней >>]
bocha
Статус: Профессиональный
Общий рейтинг: 120.44
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 109.78
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 1973. доброе утро, уважаемые эксперты! пожалуйста, подскажите как динамически создать объект класса без ис... (ответов: 3)

Вопросов: 1, ответов: 3


 Вопрос № 1973

доброе утро, уважаемые эксперты!
пожалуйста, подскажите как динамически создать объект класса
без использования оператора NEW.
например, я выделил память через globalalloc (или наподобие
этого), и теперь хочу разместить именно в этой памяти объект
ранее описанного класа. как мне это сделать?
(ответы "а зачем?" не принимаются, если спрашиваю, то значит надо.)
я пользуюсь vis c++ 6.



Вопрос отправлен: 19.10.2004, 17:54
Отправитель: soflot (soflot@ukr.net)

[Следующий вопрос >>] [Список вопросов]

Отвечает DSota

Здравствуйте, soflot!
Правильный обьект состоит из двух частей - кода и данных, которые хранятся в разных местах памяти. То есть, если нужен абсолютно новый обьект, который не был еще загружен в память, придется еще копировать в эту память и его, и вызывать дальним вызовом. А так, выделяешь память, копируешь туда таблицу виртуальных методов обьекта, его данные и т.д. Дело долгое, но выполнимое.

Ответ отправлен: 19.10.2004, 18:32
Отправитель: DSota


Отвечает bocha

Здравствуйте, soflot!
union{
my_class c;
char s[sizeof(my_class)];
}my_var;
memcpy(my_ptr, my_var, sizeof(my_var.s));


Ответ отправлен: 20.10.2004, 02:49
Отправитель: bocha


Отвечает vitya

Здравствуйте, soflot!
Используйте размещающую форму оператора new.
void * ptr = GlobalLock(hGlob);
ClassA * p = new (ptr) ClassA(params);

Ответ отправлен: 20.10.2004, 11:24
Отправитель: vitya



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (26)
C / C++ (17)
Perl (8)
Builder / Delphi (17)
Pascal (20)
Basic / VBA (9)
Java / JavaScript (6)
PHP (18)
Криптография (8)
WinAPI (15)
Радиоэлектроника (15)
Пользователю
Windows 95/98/Me (43)
Windows NT/2000/XP (62)
"Железо" (39)
Поиск информации (21)
Администратору
Windows NT/2000/XP (37)
Linux / Unix (14)
Юристу
Гражданское право (7)
Семейное право (4)
Трудовое право (6)
КоАП (5)

Отправить вопрос всем экспертам выбранной рассылки.





http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.cplus
Отписаться

В избранное