4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
1

Где хранятся временные объекты?

25.07.2020, 19:45. Показов 2219. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В какой области памяти хранятся временные объекты если они не константные и на них ничего не ссылается?Они же не могут хранится на стеке либо в куче тк нельзя получить адрес временного объекта.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2020, 19:45
Ответы с готовыми решениями:

Ссылки на временные объекты
Здравствуйте! В процессе экспериментов с С++ появились некоторые непонятки. Рассмотрим код: ...

Необязательные временные объекты
Помогите с задачкой: Класс Car содержит модель автомобиля. Функция Find определяет, присутствует...

Теория, Временные объекты
Прошу ответить на пару вопросов. Конкретный вопрос: В тексте while (Pos !=...

Временные объекты и ссылки
При инициализации ссылки временным объектом, ссылка должна быть либо rvalue-ссылкой, либо...

20
2105 / 1192 / 496
Регистрация: 11.10.2018
Сообщений: 6,000
25.07.2020, 19:47 2
Цитата Сообщение от Vanconts Посмотреть сообщение
Они же не могут хранится на стеке
- Почему? Как раз там и могут.
Думаю хранятся в Оперативке, в регистрах и на стэке.
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
25.07.2020, 19:47 3
Цитата Сообщение от Vanconts Посмотреть сообщение
В какой области памяти хранятся временные объекты если они не константные и на них ничего не ссылается?Они же не могут хранится на стеке либо в куче тк нельзя получить адрес временного объекта.
На стеке и хранятся. Что ты имеешь ввиду под "временными объектами"?
0
2105 / 1192 / 496
Регистрация: 11.10.2018
Сообщений: 6,000
25.07.2020, 19:47 4
Смотря еще какой объект. Если переменная - то в регистре может.
Если объект с кучей параметров - то в ОЗУ.
0
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
25.07.2020, 20:00  [ТС] 5
FFPowerMan, oleg-m1973,
C++
1
2
3
4
5
6
7
struct st{};
 
 
int main()
{
    st();
}
если объект созданный с помощью st() хранится в сетке то почему я не могу получить его адрес?
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
25.07.2020, 20:04 6
Цитата Сообщение от Vanconts Посмотреть сообщение
если объект созданный с помощью st() хранится в сетке то почему я не могу получить его адрес?
Потому что адрес получается по имени переменной, а здесь имени нет. Но под объект точно также резервируется место на стеке и вызываются конструктор/деструктор.

Добавлено через 1 минуту
Адрес можно получить например вот так
C++
1
2
3
4
5
6
7
8
9
10
struct st
{
    st *addr() {return this;}
}:
 
 
int main()
{
    st *p = st().addr();
}
0
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
25.07.2020, 20:06  [ТС] 7
oleg-m1973, тогда я что-то вообще ничего не понимаю, как отличить rvalue от lvalue?
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
25.07.2020, 20:10 8
Цитата Сообщение от Vanconts Посмотреть сообщение
oleg-m1973, тогда я что-то вообще ничего не понимаю, как отличить rvalue от lvalue?
Это не об выделении памяти. У rvalue деструктор будет вызван сразу по окончанию выражения, на точке с запятой.
0
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
25.07.2020, 20:14  [ТС] 9
oleg-m1973, так в этом же случае так и есть , деструтор сразу после контруктора
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
class c {
public:
    c() :a(0) { std::cout << "simple constructor\n"; }
    c(int a) :a(a) { std::cout << "int constructor\n"; }
 
 
    ~c() { std::cout << "destructor\n"; }
    
    int a;
};
 
 
int main()
{
    c();
    c();
}
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
25.07.2020, 20:17 10
Цитата Сообщение от Vanconts Посмотреть сообщение
oleg-m1973, так в этом же случае так и есть , деструтор сразу после контруктора
Ну да. А я как сказал?
0
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
25.07.2020, 20:19  [ТС] 11
oleg-m1973, так что джелает этот объект rvalue ? то что у него нету имени?
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
25.07.2020, 20:23 12
Цитата Сообщение от Vanconts Посмотреть сообщение
oleg-m1973, так что джелает этот объект rvalue ? то что у него нету имени?
В смысле, что делает? В данном случае инициализирует и деинициализирует объект, т.е. вызывает конструктор и деструктор. Память под этот объект выделяется на стеке при старте функции и уничтожается при выходе из неё.
0
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
25.07.2020, 20:24  [ТС] 13
oleg-m1973, не так вопрос поняли, почему этот объект rvalue? потому что у него нету имени?
0
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
25.07.2020, 20:26 14
Цитата Сообщение от Vanconts Посмотреть сообщение
В какой области памяти хранятся временные объекты если они не константные и на них ничего не ссылается?
Цитата Сообщение от Vanconts Посмотреть сообщение
C++
1
2
3
4
struct st{};
int main()
{
 st();
}
В данном случае, большинство компиляторов не станет его создавать в случаях, если создание объекта не выполняет каких-то действий в программном окружении как сайд-эффект. То есть его вообще может не быть. В ряде случаев, если какие-то действия совершаются, соответствующий код может быть скомпилирован без создания объекта.
Кроме того.
Vanconts, rvalue и временный объект это не синонимы.
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
25.07.2020, 20:31 15
Цитата Сообщение от Vanconts Посмотреть сообщение
oleg-m1973, не так вопрос поняли, почему этот объект rvalue? потому что у него нету имени?
Да, поэтому
0
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
25.07.2020, 20:37  [ТС] 16
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Да, поэтому
oleg-m1973, а если вернуть lvalue ссылку на объект эта ссылка не будет иметь имени но она будет lvalue)

Добавлено через 4 минуты
IGPIGP, вот вроде есть четкий список случаев когда и что https://en.cppreference.com/w/... e_category но почему к примеру если функция возвращает объект по значению то этот объект prvalue? Потому что так написано в стандарте?
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
25.07.2020, 20:40 17
Цитата Сообщение от Vanconts Посмотреть сообщение
oleg-m1973, а если вернуть lvalue ссылку на объект эта ссылка не будет иметь имени но она будет lvalue)
В смысле? Ты путаешь ссылку и экземпляр объекта. Сама ссылка это такая же, как и все другие, переменная с типом "ссылка на lvalue". Соответственно без имени, она будет rvalue-переменной типа "ссылка на lvalue". Если бы у неё был деструктор, он бы вызвался.
0
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
25.07.2020, 21:17  [ТС] 18
oleg-m1973, тоесть rvalue это любое выражение без имени?
0
18829 / 9832 / 2403
Регистрация: 30.01.2014
Сообщений: 17,267
26.07.2020, 03:20 19
Цитата Сообщение от Vanconts Посмотреть сообщение
тогда я что-то вообще ничего не понимаю
rvalue, lvalue - это категории выражений. Объекты и их адреса - ортогональные этому вещи.
Выражение может, но не в любой ситуации, порождать (временный) объект. Т.е. объект - это только следствие.

Категории выражений:
http://eel.is/c++draft/expr.prop#basic.lval

Временные объекты:
http://eel.is/c++draft/conv.rval#1
http://eel.is/c++draft/basic.m... .temporary
2
argcargv
26.07.2020, 04:20     Где хранятся временные объекты?
  #20

Не по теме:

Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Ты путаешь ссылку и экземпляр объекта. Сама ссылка это такая же, как и все другие, переменная с типом "ссылка на lvalue". Соответственно без имени, она будет rvalue-переменной типа "ссылка на lvalue". Если бы у неё был деструктор, он бы вызвался.
Иногда поражаешься, как можно такую кашу в голове иметь. :D

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.07.2020, 04:20

Временные объекты встроенного типа
Привет! пытаюсь углубляться в C++, решил почитать книгу Саттера, на первом примере, остановился и...

"Анонимные" (временные) объекты?
Пусть имеется класс T: class T { public: int a; int b; T(int _a, int _b) : a(_a), b(_b) {}...

Где хранятся символы?
Здравствуйте, поясните пожалуйста работу программы char ch; cout &lt;&lt; &quot;enter а phrase: &quot;; ...

Где хранятся данные?
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; // Дана информация о пяти комнатах...

Где хранятся аргументы, передаваемые в функцию
собственно - сабж... интересует вопрос, где же (в какой памяти) всё таки хранятся аргументы,...

Где хранятся старые значения вложенных циклов?
Здравствуйте, есть задача по построению прямоугольного треугольника с использованием цикла for и...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru