163 / 163 / 68
Регистрация: 23.02.2011
Сообщений: 392
|
|||||||||||||||||||||||||||||||||||||||||
1 | |||||||||||||||||||||||||||||||||||||||||
"Анонимные" (временные) объекты?01.08.2012, 19:08. Показов 4787. Ответов 11
Метки нет (Все метки)
Пусть имеется класс T:
(в Джаве что-то подобное называется анонимным) объект?
И опять же, в Джаве то сборщик мусора есть, а здесь, увы, неизбежная утечка. Только из-за неё и не юзабельно? А, ну разве что.
Ну или же можно использовать
0
|
01.08.2012, 19:08 | |
Ответы с готовыми решениями:
11
Анонимные объекты Необязательные временные объекты Теория, Временные объекты Временные объекты и ссылки |
163 / 163 / 68
Регистрация: 23.02.2011
Сообщений: 392
|
|
01.08.2012, 19:20 [ТС] | 3 |
Vourhey, вместо new - &, как в последней строке моего поста? на это кстати ворнингами ругается компилятор
0
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
01.08.2012, 19:23 | 4 |
Ну, так как, у тебя функция принимает указатель, то, само собой, амперсанд нужен для взятия адреса. В скобки это все дело, в идеале.
Добавлено через 18 секунд по***
1
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
||||||
01.08.2012, 19:27 | 5 | |||||
Эмм...
0
|
163 / 163 / 68
Регистрация: 23.02.2011
Сообщений: 392
|
|
01.08.2012, 21:28 [ТС] | 6 |
~OhMyGodSoLong~, не совсем, нужно именно указатель передать
0
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
||||||||||||||||||||||||||
01.08.2012, 22:15 | 7 | |||||||||||||||||||||||||
Не, ну тут передаётся ссылка на этот временный объект (фактически, указатель). Без его копирования. Но есть ограничение: этот объект нельзя изменять. И он, конечно же, будет удалён (автоматически) из стека после выполнения функции, куда был передан.
Если именно настоящий указатель с правом изменять содержимое, то у вас всё верно: или (не анонимная) идиома
1
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
01.08.2012, 23:26 | 8 |
добавлю, что случаи, когда владение объектом нужно передать функции, которая должна будет удалить его, лучше оформлять в виде соответствующих смарт-поинтеров, чтобы явно подчеркнуть факт того, что объект удалится внутри функции. иначе это нужно будет описывать в каментариях, либо лезть в код функции и смотреть, что она делает с простым указателем.
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
||||||
01.08.2012, 23:49 | 9 | |||||
А вот в связи с этим у меня вопрос возник.
Вызываем, например, так:
Эксперимент на единственном компиляторе показывает, что объект удаляется после использования внутри функции. И тут обнаружился пробел в моих знаниях: есть ли гарантия такого поведения со стороны стандарта? P.S. Вряд ли я буду использовать такую конструкцию Просто интересно стало.
1
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
02.08.2012, 00:24 | 10 |
Не по теме: [Заблуждение] Ну, не знаю, как насчёт стандарта (лень), но это ожидаемое поведение. При входе в функцию в стеке создаётся shared_ptr, который создаёт T и запоминает его. При выходе из функции стек очищается, у shared_ptr вызывается деструктор, счётчик ссылок уменьшается до нуля (если из функции shared_ptr не выносили), созданный T нормально удаляется shared_ptr, так как счётчик ссылок на нуле. Тьфу, не заметил get(). Ммм... Интересно, считается ли подобный вызов типа-рекурсивным. То есть удаляется ли временный shared_ptr после вызова функции или после вычисления аргумента. Но это уже точно в стандарт надо идти.
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
02.08.2012, 00:29 | 11 |
У меня не было бы сомнений, если бы в функцию передавался бы сам умный указатель. Сомнения возникли из-за того, что в функцию передаётся результат вызова функции .get(), после чего сам умный указатель уже как бы и ни при чём. Ладно, потом постараюсь покопаться в стандарте.
Добавлено через 58 секунд Ага. Вот.
0
|
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
||||||
02.08.2012, 00:38 | 12 | |||||
Сообщение было отмечено как решение
Решение
Посмотрел. [class.temporary]/3:
Так что да, имеет право на жизнь. Ну, фактически, это тот самый точечный GC.
3
|
02.08.2012, 00:38 | |
02.08.2012, 00:38 | |
Помогаю со студенческими работами здесь
12
Ссылки на временные объекты Временные объекты встроенного типа Где хранятся временные объекты? Анонимные объекты(?), область определения Скажите, пожалуйста, что такое каталог tmp и что такое временные временные файлы? Анонимные сообщения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |