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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2010, 02:23   #1
exploys
Пользователь
 
Регистрация: 21.05.2009
Сообщений: 21
По умолчанию Копирование объектов в Multithreading

Упрощенный пример
Код:
class MyClassA
{
 public:
 class MyClassB
 {
  int Par1;
  char Par2;
 }

 int ParA;
 MyClassB *MyObjectsB;
 unsigned int CountMyObjects;

 void initFromFile(string fileName)
 { .... }
};

MyClassA objectA1;

int main(int argc, char* argv[])
{
 objectA1.initFromFile("fileName");
}

void MyFunc(void)
{
 MyClassA objectA2;
 objectA2 = objectA1; 
}
И собственно два вопроса:
1. Как лучше сделать чтобы при objectA2 = objectA1; копировались не указатели на MyObjectsB, а создавалась собственная копия MyObjectsB для objectA2. Перегрузкой оператора =, отдельной функцией или как-то ещё.
2. При условии, что функция void MyFunc(void) будет вызываться из множества потоков что следует исправить в коде?

Подскажите что исправить или посоветуйте литературу, а если и то и то, то вообще будет шикарно.
exploys вне форума Ответить с цитированием
Старый 20.10.2010, 10:40   #2
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

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

Последний раз редактировалось sashonk; 20.10.2010 в 10:51.
sashonk вне форума Ответить с цитированием
Старый 20.10.2010, 21:53   #3
exploys
Пользователь
 
Регистрация: 21.05.2009
Сообщений: 21
По умолчанию

Цитата:
Сообщение от sashonk Посмотреть сообщение
1. тебе нужно определить свой конструктор копирования. почитай про глубокое копирование (хотя бы в википедии)
2. есть много способов для синхронизации потоков, напр. мьютексы, критические секции, семафоры. Я, например, в своих программах использовал обертку над критическими секциями, если надо могу подогнать
1. Да с конструктором копирования разобрался и сделал глубокое копирование. Но он работает только в вариантах:
MyClassA objectA2 = objectA1;
MyClassA objectA2(objectA1);

а если написать objectA2 = objectA1; то произойдет поверхностное копирование и в деструкторе при delete MyObjectsB[]; выдаст ошибку.


2. Да если можно покажите, буду благодарен
exploys вне форума Ответить с цитированием
Старый 21.10.2010, 10:19   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Цитата:
а если написать objectA2 = objectA1; то произойдет поверхностное копирование и в деструкторе при delete MyObjectsB[]; выдаст ошибку.
А тут надо просто перегрузить operator= для этого класса, также с глубоким копированием.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 29.11.2010, 10:41   #5
exploys
Пользователь
 
Регистрация: 21.05.2009
Сообщений: 21
По умолчанию

А при перегрузке оператора = обязательно придется прописывать копирование каждой переменной или можно как-то их скопом скопировать? (а затем уже с нужными объектами провести глубокое копирование)
exploys вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
координаты объектов ИльяМалиновский JavaScript, Ajax 1 23.01.2010 11:35
Переход от цикла к циклу не выходя из цикла (без multithreading) Qousio Общие вопросы C/C++ 2 16.05.2009 09:27
Столкновение объектов [Smarik] Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 27.09.2008 16:54
Копирование и преобразование объектов joker Общие вопросы Delphi 1 23.03.2008 14:47
Мерцание объектов Chaos-Delta Мультимедиа в Delphi 4 02.07.2007 13:59