Форум программистов, компьютерный форум CyberForum.ru

Как удалить объект, который это попросил? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Аналог функции SetLength http://www.cyberforum.ru/cpp-beginners/thread1207031.html
Здравствуйте. Подскажите, пожалуйста, каков аналог на си++ функции setlength? функция malloc?
C++ Написать программу вычисляющую факториал числа, находящегося в поле ввода Выручайте люди добрые) Программа вычисляющая факториал числа, находящегося в поле ввода. Для вычисления использовать рекурсивную функцию. Нарыл ток рисонок) http://www.cyberforum.ru/attachment.php?attachmentid=410645&stc=1&d=1402653187 http://www.cyberforum.ru/cpp-beginners/thread1207030.html
Создание теста C++
Нужно написать программу(тест) которая выводит вопрос и 4 варианта ответа, а в конце тестирования кол-во правильных ответов Например: Выберите машинный язык программирования 1) Basic 2) Assembler 3) С++ 4) Delphi
Сложение и удвоение точки на эллиптической кривой C++
нужно составить алгоритм сложения и удвоения точки на эллиптической кривой, может знаете как?
C++ Работа со строками.Не могу понять, что именно от меня хотят http://www.cyberforum.ru/cpp-beginners/thread1206994.html
Найти максимум расстояний между монотонно убывающей и монотонно возрастающей подстроками длиной не менее 3 символов, которые есть во второй строке в инвертированном виде
C++ Выполнить поиск по букве и вывести фамилию автора Условие: выполнить поиск по букве и вывести фамилию автора #include <iostream.h> #include <stdio.h> struct record { char familiya; char tvir; }; char familiya1; подробнее

Показать сообщение отдельно
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
13.06.2014, 14:43     Как удалить объект, который это попросил?
Сам вопрос возник, когда работал с Qt и их системой signal/slot. Проблема на С++ выглядела бы так:
Есть два объекта: А(асинхронный) и О(ожидающий).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
struct O
{
    A *a;
    int downloadsAmount;
    MainObject *parent;
    
    void run() // Этот метод запускается в отдельном потоке. После его окончания, поток завершается
    {
        a = new A(this);
        a->download(); // Так же создает ещё один поток для метода download();
    }
    
    void downloadFinished()
    {
        ++downloadsAmount;
        parent->data = a->data; // по некоторым причинам, Data не является указателем
        // После сохранения data в MainObject, поток А тоже завершится (на самом деле в методе download(O *parent), но не суть. Главное, что теперь копия данных в А осталась без именений - её никто не удалил. В идеале было бы сделать, как ниже :
        
        // delete a; // но так нельзя, ведь после этого метода поток вернется в методе структуры А. Да, там больше нет обращения к данным А, но всё равно - это неправильно. В моем случае, это ошибка.
    }
}
 
struct A
{
    Data d; // не указатель
    
    void download(O *parent)
    {
        /*скачиваем*/
        parent->downloadFinished();
    }
}
Как удалить объект А, созданный в другом потоке, который завершил свое исполнение? Единственное, что я придумал, это занести его в какой-то глобальный
C++
1
vector < BaseObject * > crap;
- и каждую итерацию чего-нибудь очищать этот вектор. Само собой для вектора понадобится мьютекс, иначе не thread-safe. Есть ли иное решение?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru