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

C++

Войти
Регистрация
Восстановить пароль
 
hoggy
6813 / 3001 / 516
Регистрация: 15.11.2014
Сообщений: 6,795
Завершенные тесты: 1
#1

Можно ли полагаться на поведение this->shared_from_this() - C++

05.10.2015, 19:25. Просмотров 283. Ответов 3
Метки нет (Все метки)

добрый вечер.

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
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <memory>
 
 
struct sample: std::enable_shared_from_this<sample>
{
    
    // --- если объект sample был создан на стеке
    // то shared_from_this не сможет вернуть шаред
    // потому что, никто не создавал шаред
    std::shared_ptr<sample> shared()
    {
        return this->shared_from_this();
    }
};
 
int main()
{
    std::cout << "Hello, world!\n";
    
    try{
        
        sample s;
        s.shared();
    }
    
    // --- при этом, на компиляторах cl/gcc/clang
    // вылетает исключение
    catch(const std::bad_weak_ptr& e)
    { 
        std::cout << e.what()<<'\n'; 
    }
    
    // --- однако в стандарте нет никаких упоминаний
    // об этой ситуации
    // там ничего не сказанно, что будет,
    // если запустить shared_from_this
    // для невалидного смартпоинтера
    
    // вопрос: можно ли закладываться на данное поведение?
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2015, 19:25
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Можно ли полагаться на поведение this->shared_from_this() (C++):

Аномальное поведение и shared_ptr weak_ptr enable_shared_from_this shared_from_this - C++
Здравствуйте форумчане, самостоятельно изучаю C++ уже около года. Но время от времени натыкаюсь на проблемы которые не получается решить...

Отличия this от shared_from_this() ? - Boost C++
Изучаю пример. http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/example/cpp11/echo/async_tcp_echo_server.cpp Есть вот такой...

Библиотека .NET насколько стоит на нее полагаться в C# - C#
Всем привет! :)Вопрос такой, из теории скорее. Скомпилировав простую программу у себя на Винде 7, я попробовал запустить её на другом ноуте...

Можно ли сменить поведение блоков? - HTML, CSS
10 лет верстаю, не сталкивалась с таким. Есть макет, отрисованный под 1700px. Контент фиксированный под 1024. По бокам - некий...

Не нравится поведение DataGrid в окне браузера -- можно ли поэстетичнее? - .NET
Сделал таблицу, которая выводит информацию о каждом фильме в видеотеке - по строке на фильм. Хочется, чтобы пользователь мог посмотреть не...

Можно ли в yii, используя поведение NestedSetBehavior поменять порядок веток? - PHP
Например у меня есть такое дерево: Товары -Овощи --Картошка --Морковка -Фрукты --Яблоки --Ананасы

3
ct0r
Игогошка!
1784 / 686 / 42
Регистрация: 19.08.2012
Сообщений: 1,321
Завершенные тесты: 1
05.10.2015, 22:03 #2
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0033r0.html

Вроде оно?)
1
hoggy
6813 / 3001 / 516
Регистрация: 15.11.2014
Сообщений: 6,795
Завершенные тесты: 1
06.10.2015, 01:06  [ТС] #3
Цитата Сообщение от ct0r Посмотреть сообщение
Вроде оно?)
не нашел ответа на свой вопрос
0
ct0r
Игогошка!
1784 / 686 / 42
Регистрация: 19.08.2012
Сообщений: 1,321
Завершенные тесты: 1
06.10.2015, 20:31 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
The proposed wording removes the preconditions on shared_from_this so that it is now well-defined to call it on an object which is not owned by any shared_ptr, in which case shared_from_this would throw an exception. weak_from_this().lock() is a non-throwing alternative to shared_from_this() that returns an empty shared_ptr when the object is not owned by any shared_ptr. This can be used in situations where the overhead of an exception is undesirable and in environments that disable exceptions entirely.

А пока это UB, очевидно:

1.3.25 [defns.undefined]
undefined behavior
behavior for which this International Standard imposes no requirements
[ Note: Undefined behavior may be expected when this International Standard omits any explicit definition of
behavior
or when a program uses an erroneous construct or erroneous data. Permissible undefined behavior
ranges from ignoring the situation completely with unpredictable results, to behaving during translation or
program execution in a documented manner characteristic of the environment (with or without the issuance of
a diagnostic message), to terminating a translation or execution (with the issuance of a diagnostic message).
Many erroneous program constructs do not engender undefined behavior; they are required to be diagnosed.
— end note ]
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2015, 20:31
Привет! Вот еще темы с ответами:

Как можно , используя ждейКуэри ,изменить поведение ждейКуэри Уи Диалог? - PHP
Извините за сумбур в опросе, странный фильтр у того заголовка, сказал, что нельзя использовать русские и английские буквы в одной строке. ...

VS 2012 Можно ли как-то вернуть поведение со сниппетами типа foreach, как было до решарпера? - Visual Studio
Здравствуйте! Может тут кто знает, в англофорумах не нашёл почему-то. Пытаюсь вместе с командой приучиться к решарперу, но по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru