Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: STL. Автоматическое удаление объекта.  (Прочитано 3509 раз)
0 Пользователей и 1 Гость смотрят эту тему.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« : 19-11-2009 13:19 » 

В общем, я малость запутался.

Есть некий тип-структура, имеющий в своем составе какой-либо STL-объект.
Я передаю такую структуру по указателю в конструктор класса.
В конструкторе делается копия в член класса, изменение оригинала и, при определенных условиях, копирование в обратную сторону - копия из члена класса в указатель.

Код:
typedef struct _struct1_t
{
  // .....
} struct1_t;

typedef std::vector<struct1_t> list_struct1_t;

typedef struct _struct2_t
{
  list_struct1_t list;
} struct2_t;

class class1
{
private:
  struct2_t *p, copy;
public:
  class1(struct2_t *p);
  void onExit(void);
};

class1::class1(struct2_t *p)
{
  this->p = p;
  copy = *p;
}

void class1::onExit(void)
{
  if (....)
    *p = copy;
}

Вопрос вот в чем: нет ли тут каких подвохов, если сработает код в onExit()?
Код:
   *p = copy;

Вроде бы не должно, но я не уверен. Под вечер мозг немного скрючился и туго думает.
« Последнее редактирование: 19-11-2009 13:28 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 19-11-2009 13:41 » 

А время жизни того объекта, который передаётся по указателю в конструктор, гарантированно превышает время жизни объекта class1? По-моему, если с чем и могут быть проблемы - так с тем, что *p уже не существует к моменту вызова onExit.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 19-11-2009 14:14 » new

Вад, да. Типа такого:

Код:
void func(void)
{
  struct2_t val;
  class1 *pc1;

  pc1 = new class1(&val);
  // ... работа с pc1
  delete pc1;
  // ... работа с val
}

Попробовал напрячь мозг. Думаю, что все в порядке.
Пол года не подходил к этому коду и порядком подзабыл, что и как в нем работает...
« Последнее редактирование: 19-11-2009 14:17 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines