С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Smart pointer - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Компилятор MinGW в NetBeans не видит класс потока (thread) http://www.cyberforum.ru/cpp-beginners/thread1523349.html
Версия NetBeans - 8.0.2 компилятор - MinGW Суть проблемы в следующем - использую NetBeans для С++, компилятор MinGW. Начал изучать работу с потоками (код простой программы приведен ниже). Но...
C++ Как собственные типы (typedef) использовать в других модулях программы Привет всем. С++ изучаю только, поэтому спотыкаюсь частенько. Сейчас возникла следующая проблема. Суть такая.. Пишу модульную программу. В одном из моих модулей (Data) описаны переменные,... http://www.cyberforum.ru/cpp-beginners/thread1523344.html
Зашифровать четырехзначное число, не понимаю условие задачи C++
Всё глубже в ночь и голова всё хуже работает. Условие: (Зашифровать четырехзначное число, к примеру, 4213) "... заменять каждую цифру значением (сумма этой цифры плюс 7) по модулю 10." Что...
C++ For_each не меняет входной контейнер
здравствуйте есть код который нужно сделать с помощью std::for_each без c++11 и boost: std::list<UnicodeString> map; map.push_back("hello"); map.push_back("slowly"); map.push_back("world");...
C++ Friend функции не имеют доступ к закрытым переменным http://www.cyberforum.ru/cpp-beginners/thread1523296.html
Всем привет. Изучаю c++ по Липпману 5-ое издание. Там на стр. 351-352 используются friend функции для получения доступа к закрытым переменным. Выглядит все это так: #ifndef SALESDATA_H_INCLUDED...
C++ Возведение числа типа int в степень Здравствуйте. int n = 2; int x = 2; while (n) { n = x * n; cout << n << endl; } подробнее

Показать сообщение отдельно
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
02.09.2015, 09:34
Цитата Сообщение от Воротислав Посмотреть сообщение
Как Qt дружит с std::shared_ptr?
Если ты будешь указывать родителя в конструкторе создаваемого объекта, то этот родитель при своем уничтожении будет пытаться уничтожить также и свои дочерние объекты. Если дочерний объект сидит в shared_ptr, то это уничтожение останется незамеченным для него. И он будет продолжать считать, что ссылается на валидный объект.
Т.е. ситуация эквивалентна такой:
C++
1
2
3
4
5
6
7
8
{
    MyClass * obj = new MyClass();
    std::shared_ptr<MyClass> objPtr(obj);
    delete obj;
    
    objPtr->foo(); // oops
 
} // ~std::shared_ptr<MyClass>() - oops
В связи с этим использовать можно, но осторожно. Следить на временем жизни родителя, чтобы оно не закончилось раньше, чем время жизни последней копии shared_ptr, либо не указывать родителя вовсе.

Добавлено через 2 минуты
Цитата Сообщение от Воротислав Посмотреть сообщение
Возможно ли и здесь применить shared_ptr??
Конкретно в приведенном коде shared_ptr вообще-то избыточен. Достаточно сделать так:
C++
1
2
3
4
5
void MyWidget::on_buttonSettings_clicked()
{
   std::unique_ptr<DialogSettings> set(new DialogSettings(this));
   set->exec();
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.