Russian Qt Forum
Октябрь 04, 2024, 20:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено]Умный указатель на член класса  (Прочитано 7147 раз)
Sancho_s_rancho
Гость
« : Август 03, 2010, 09:22 »

В  статье http://www.codeproject.com/KB/stl/boostsmartptr.aspx рекомендуется использовать Scoped Pointer  для автоматического уничтожения членов класса. Как же это можно сделать, если у него даже оператора "=" нет?
В заголовочном файле можем написать QScopedPointer<MyClass> p, и что делать далее?
« Последнее редактирование: Август 03, 2010, 11:10 от Sancho_s_rancho » Записан
BRE
Гость
« Ответ #1 : Август 03, 2010, 09:56 »

Инициализировать в конструкторе, также есть метод:
void QScopedPointer::swap ( QScopedPointer<T, Cleanup> & other )
« Последнее редактирование: Август 03, 2010, 09:57 от BRE » Записан
Sancho_s_rancho
Гость
« Ответ #2 : Август 03, 2010, 10:30 »

Инициализировать в конструкторе, также есть метод:
void QScopedPointer::swap ( QScopedPointer<T, Cleanup> & other )
QScopedPointer::swap я и не разглядел. Спасибо
Записан
SABROG
Гость
« Ответ #3 : Август 03, 2010, 10:50 »

Обычно используется метод reset().
Записан
Sancho_s_rancho
Гость
« Ответ #4 : Август 03, 2010, 10:55 »

Обычно используется метод reset().
Черт, мне уже стыдно. Не люблю тех, кто не читает документацию и спрашивает всякую фигню, а сам поступил так же.
Записан
blood_shadow
Гость
« Ответ #5 : Август 11, 2010, 19:28 »

Инициализировать в конструкторе, также есть метод:
void QScopedPointer::swap ( QScopedPointer<T, Cleanup> & other )
Вопрос про умный указатель -
 есть метод
Код:
void val::runString_value() const
{
    QString program = "C:\\Program_Files\\Qt\\2010.02\\files\\Gui\\string_val\\val1\\String_value(betta).exe";

    QProcess *process = new QProcess;
    process->start(program);
    connect(process, SIGNAL(finished(int, QProcess::ExitStatus)),
            this, SLOT(loadOutputText()));

    //delete process; - Нельзя!!
    return;
}
удалить process нельзя так как получится удаление до завершения процесса, вопрос - если применять этот "умный указатель" он освободит память после завершение process, если даже произойдет выход по ретурну? Он в любом случае удалит указатель на объект если тот уже ненужен будет?
Спасибо
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #6 : Август 11, 2010, 19:31 »

connect(process, SIGNAL(finished(int, QProcess::ExitStatus)),
            process, SLOT(deleteLater()));
Записан
blood_shadow
Гость
« Ответ #7 : Август 11, 2010, 19:43 »

connect(process, SIGNAL(finished(int, QProcess::ExitStatus)),
            process, SLOT(deleteLater()));
Спасибо, получилось Улыбающийся, то есть кругом можно обойтись и без этого "умного указателя"? или все же есть ситуации где без него никак?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #8 : Август 11, 2010, 19:51 »

а хрен знает, никогда не использовал)
по идее только для удобства/уменьшения ошибок
Записан
blood_shadow
Гость
« Ответ #9 : Август 11, 2010, 20:00 »

а хрен знает, никогда не использовал)
по идее только для удобства/уменьшения ошибок
Благо в Qt усть механизм сигнал-слот, мне спадает на мысль что это в других фреймворках уместно  Улыбающийся
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #10 : Август 11, 2010, 20:04 »

не, ну через делет лейтер объект будет удален только когда управление попадет только на следующий виток цикла событий...
иногда это нежелательно
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 23.