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

А как можно передать в конструкторы полей класса временный объект

время жизни которого будет ограниченно конструктором класса содержащего поля? Вообще у меня задача такая: есть класс который нужно создать до инициализации статиков (код рантайма, который запускает эту инициализацию под моим контролем), ему при конструировании нужно передать некоторую информацию (потому синглтон подходит плохо), также нельзя пользоваться кучей, поскольку класс, собственно, за неё отчасти и отвечает, вопрос в том как это сделать наименее костыльно

PS: забыл сказать, временный объект нужно передать всем полям, по ссылке, он по задумке не копируемый

14 ответов

27 просмотров

передать параметр по значению? объект будет создан для конструктора и умрёт в конце него

Если временный объект, то это мув-конструктор. Ну или по значению. Интересно что "до инициализации статиков" - это дремучее С. Как Вы туда с++ засунули?

disba1ancer- Автор вопроса
Int Unsigned
Если временный объект, то это мув-конструктор. Ну ...

писать аллокатор на си оказалось не благодарным делом, у меня с мощью плюсов это со скрипом получается, так что да засунул

disba1ancer- Автор вопроса
Int Unsigned
Если временный объект, то это мув-конструктор. Ну ...

я же говорю код рантайма свой, могу до инициализации статиков вызывать любые функции

disba1ancer- Автор вопроса
Ivan Sokolov
передать параметр по значению? объект будет создан...

не могу, этот параметр — ссылка на аллокатор, один конструктор должен им воспользоваться, второй, может его мувнуть (точнее взять его состояние и что-то с ним сделать, но состояние можно описать как moved out), к вопросу, сейчас напишу постскриптум

Ну типо T(U())? Или как?

disba1ancer- Автор вопроса
disba1ancer
под PC

Ха-ха, под ОС хоть?

disba1ancer- Автор вопроса
Т
Ну типо T(U())? Или как?

не так, скорее так: Foo() { Bar bar{}; construct_field1(bar); construct_field2(bar); }

disba1ancer- Автор вопроса
Т
Ха-ха, под ОС хоть?

вот именно, что нет

disba1ancer
не так, скорее так: Foo() { Bar bar{}; constru...

Да никак по сути? Чисто технически у тебя же {} уже и есть "время жизни" Можешь просто попилить код типо { { локально } глобально }

disba1ancer- Автор вопроса

выложил код, для ознакомления с тем, что вообще происходит https://github.com/disba1ancer/kernel/blob/share-25052023/platform/x86_64/alloc.cpp#L891-L905

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта