Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Почему падает этот код
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 12:35 |
|
||
|
Почему падает этот код
|
|||
|---|---|---|---|
|
#18+
deleted выдается дважды. то есть объект, созданный один раз, удаляется дважды. спрашивается, какого хрена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 12:37 |
|
||
|
Почему падает этот код
|
|||
|---|---|---|---|
|
#18+
shared_ptr быдлокодер, используй enable_shared_from_this<> shared_from_this() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 13:21 |
|
||
|
Почему падает этот код
|
|||
|---|---|---|---|
|
#18+
Как написано так и происходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 13:37 |
|
||
|
Почему падает этот код
|
|||
|---|---|---|---|
|
#18+
Нафиг тут шаред поинтер? Используй ссылку: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2013, 16:55 |
|
||
|
Почему падает этот код
|
|||
|---|---|---|---|
|
#18+
Рассмотрим, как это работает во времени: Код: plaintext 1. выделяется память с помощью operator new инициализируется объект класса myc, вызывается его конструктор. Код: plaintext 1. 2. 3. 4. 5. выводится строка "created" для вызова функции test создаётся временный объект shared_ptr<myc>, инициализируемый this. Так как ещё нет ни одного shared_ptr<myc>, ссылающегося на данный объект, счёткик использования объекта равен 1. для вызова функции test создаётся копия временного объекта класса shared_ptr<myc> с указателем на наш создаваемый объект. Счётчик испльзования объекта будет уже 2. Код: plaintext 1. 2. 3. поскольку функция test пустая, мы тут же выходим из неё и при этом уничтожается объект-параметр shared_ptr<myc> obj, счётчик испльзования объекта уменьшается с 2 до 1. Возвращаемся к строке Код: plaintext 1. функция test успешно вызвана, после её вызова есть точка следования по концу выражения (';') и временный объект shared_ptr<myc>(this) уничтожается. При этом счётчик использования, который был 1, становится 0, и объект this удаляется. Это уже нехорошо, поскольку происходит это в конструкторе, возможно, до завершения полной инициализации данного объекта. Завершается исполнение конструктора. По адресу this уже лежит невалидный, удалённый объект. Управления возвращается на строку: Код: plaintext 1. Происходит создание автоматического объекта shared_ptr<myc> и инициализация его адресом уже удалённого объекта. счётчик использования = 1. программа выполняется до конца main, shared_ptr<myc> obj выходит из своего скоупа, срабатывает деструктор shared_ptr<myc> , счётчик переходит с 1 на 0, производится попытка удаления объекта, но его адрес уже невалидный. Вывод простой -- наверное, использование в конструкторе shared_ptr -- это плохая идея, потому что вся идея shared_ptr основана на концепции владения объектом, а очевидно, что объект сам собой владеть не может. Замечу также, что наличие в конструкторе класса myc выражения Код: plaintext 1. подразумевает, что объекты класса myc могут создаваться только одним способом -- в хипе. Это очень плохо (хотя стандарт языка это не запрещает), потому что в C++ объекты могут быть четырёх разных способов размещения, и все эти способы равноправны. Не дело конструктора управлять этим. И это ещё одна причина, почему shared_ptr и им подобные плохо использовать в конструкторах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2013, 00:36 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38216019&tid=2020311]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 281ms |
| total: | 428ms |

| 0 / 0 |
