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

C++

Войти
Регистрация
Восстановить пароль
 
hoggy
5735 / 2317 / 419
Регистрация: 15.11.2014
Сообщений: 5,172
Завершенные тесты: 1
#1

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

05.10.2015, 19:25. Просмотров 219. Ответов 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
    // для невалидного смартпоинтера
    
    // вопрос: можно ли закладываться на данное поведение?
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2015, 19:25     Можно ли полагаться на поведение this->shared_from_this()
Посмотрите здесь:

C++ Builder Необычное поведение цикла for
Странное поведение (сдвиг) C++
Странное поведение C++ WinAPI
Странное поведение Builder XE C++ Builder
Странное поведение wstring C++
странное поведение указателя C++
Странное поведение! C++ Builder
Непонятное поведение C++
Boost C++ Отличия this от shared_from_this() ?
C++ Непонятное поведение программы
Поведение цикла while C++
C++ Аномальное поведение и shared_ptr weak_ptr enable_shared_from_this shared_from_this

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ct0r
Игогошка!
 Аватар для ct0r
1675 / 601 / 41
Регистрация: 19.08.2012
Сообщений: 1,221
Завершенные тесты: 1
05.10.2015, 22:03     Можно ли полагаться на поведение this->shared_from_this() #2
http://www.open-std.org/jtc1/sc22/wg...5/p0033r0.html

Вроде оно?)
hoggy
5735 / 2317 / 419
Регистрация: 15.11.2014
Сообщений: 5,172
Завершенные тесты: 1
06.10.2015, 01:06  [ТС]     Можно ли полагаться на поведение this->shared_from_this() #3
Цитата Сообщение от ct0r Посмотреть сообщение
Вроде оно?)
не нашел ответа на свой вопрос
ct0r
Игогошка!
 Аватар для ct0r
1675 / 601 / 41
Регистрация: 19.08.2012
Сообщений: 1,221
Завершенные тесты: 1
06.10.2015, 20:31     Можно ли полагаться на поведение this->shared_from_this() #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 ]
Yandex
Объявления
06.10.2015, 20:31     Можно ли полагаться на поведение this->shared_from_this()
Ответ Создать тему
Опции темы

Текущее время: 08:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru