170 похожих чатов

Всем привет Вчера писал по поводу возможности изменения объекта по ссылке

в std::list

Повторил данный код на простом примере, не работает:

Tmp *tmp = new Tmp;
auto array = new Tmp[10];
array[0] = *tmp;
tmp->counter++;
tmp->counter++;
->
tmp.counter == 2
array[0].counter == 0

Может необходимо хранить массив указателей, чтобы сохранить данную возможность?

16 ответов

24 просмотра

у вас тут нет никаких ссылок

array[0] = *tmp; это присвоение копии

dimazava-Zawadskiy Автор вопроса
Ivan Sokolov
array[0] = *tmp; это присвоение копии

спасибо, получилось в обратном порядке std::list<Tmp> list;; list.push_back(*(new Tmp)); Tmp *tmp = &list.back();

dimazava Zawadskiy
спасибо, получилось в обратном порядке std::li...

list.push_back(*(new Tmp)); Максимально странное действие

dimazava-Zawadskiy Автор вопроса
Андрей Таусинов
list.push_back(*(new Tmp)); Максимально странное ...

это для примера просто, делал копипастом

В с++ нет массива ссылок. Нужно делать массив указателей. Но настоятельно рекомендую делать массив unique_ptr

dimazava-Zawadskiy Автор вопроса
Int Unsigned
В с++ нет массива ссылок. Нужно делать массив указ...

спасибо, я вообще на std::list всё делаю, это так, для упрощения показать хотел за unique_ptr подход не знал, возьму на вооружение

Int Unsigned
В с++ нет массива ссылок. Нужно делать массив указ...

https://en.cppreference.com/w/cpp/utility/functional/reference_wrapper Вот так это можно обойти, если прямо нужно

dimazava-Zawadskiy Автор вопроса
Андрей Таусинов
https://en.cppreference.com/w/cpp/utility/function...

It is frequently used as a mechanism to store references inside standard containers (like std::vector) which cannot normally hold references. прям то что доктор прописал

Ещё можно порекомендовать плотно подумать, точно ли вам нужен list, а не vector.

dimazava Zawadskiy
It is frequently used as a mechanism to store refe...

но надо понимать последствия - если ссылка "провиснет", то можно об этом и не узнать

Alexander "Ternvein" Isaev
Ещё можно порекомендовать плотно подумать, точно л...

человеку стабильность ссылок нужна, как я понял. так что видимо list либо deque (с deque нюансы есть)

dimazava-Zawadskiy Автор вопроса

по итогу проверил мой код (который писал чуть ранее, с std::list, не этот упрощённый) на убунте с g++, всё работает у меня на clang 1 в 1 код, абсолютно идентичный не работает с g++ на убунте по указателю объект модифицируется и в сохранённом свойстве и в списке, а с cland на макоси - только сохранённое свойство, в списке изменение не проходит

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта