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 ответов

21 просмотр

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

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 на макоси - только сохранённое свойство, в списке изменение не проходит

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта