|
ссылки в сырых экземплярах класса
|
|||
---|---|---|---|
#18+
натолкнулся на такую проблему и загрустил MS VS 2013 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
В общих чертах: есть класс data holder, который работает с данными. Есть класс, который эти данные сериализует. Вчера сделал класс (типа CUse) у которого стописят таких настроек. Чтобы не плодить код, решил завести параметры (типа CSerializer ser_), а наружу выкинуть ссылки на сами данные(типа const int& Data = ser_.Param.Data;). Быстро. Удобно. Лаконично. Но не работает даже если делать инициализацию ссылки в конструкторе. Почему не работает: ser_ при создании объекта заполняется 0xcdcdcdcd, после этого внутри по смещению берётся указатель на Param и c него делается смещение на Data, но Param на этот момент тоже 0xcdcdcdcd, что приводит к AV. Можно как-то эту проблему обойти? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2019, 05:36 |
|
ссылки в сырых экземплярах класса
|
|||
---|---|---|---|
#18+
нормальный компилятор тебе сообщит что поле ser_ будет проинициализировано после поля Data. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2019, 06:21 |
|
ссылки в сырых экземплярах класса
|
|||
---|---|---|---|
#18+
авторБыстро. Удобно. Лаконично. и дополнительный указатель в памяти с каждой ссылкой. переход скорее всего компилятор соптимизирует, но память будет обязан выделить. а геттер полностью бесплатный :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2019, 06:29 |
|
ссылки в сырых экземплярах класса
|
|||
---|---|---|---|
#18+
alex_kа геттер полностью бесплатный :)Геттер - функция, нужно ещё писать пару скобок. А так же в дебаге: Код: plaintext 1. 2. 3.
в первом случае я сразу могу посмотреть значение. Во втором мне надо будет или провалиться, или лезть внутрь ser_. Тут, конечно, можно посмотреть и value, но иногда правая часть просто передаётся в функцию. alex_kи дополнительный указатель в памяти с каждой ссылкой.Ну, было бы классно, если можно было бы делать фиктивные ссылки, которые не ссылки, а сами объекты, но read-only . Ведь на самом деле, private и protected проверяются только на уровне компилятора. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2019, 09:01 |
|
ссылки в сырых экземплярах класса
|
|||
---|---|---|---|
#18+
CEMb Код: plaintext 1.
Это не будет работать если объект копируется. Ссылки будут указывать на старые копии. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2019, 11:23 |
|
ссылки в сырых экземплярах класса
|
|||
---|---|---|---|
#18+
CEMbМожно как-то эту проблему обойти?С++ инициализирует данные-члены в порядке их объявления в классе. Местами данные и ссылки поменяй и будет тебе щастье) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2019, 15:49 |
|
ссылки в сырых экземплярах класса
|
|||
---|---|---|---|
#18+
Anatoly MoskovskyCEMb Код: plaintext 1.
Это не будет работать если объект копируется. Ссылки будут указывать на старые копии. Объект со ссылками автоматом не копируется. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2019, 00:29 |
|
|
start [/forum/topic.php?fid=57&fpage=14&tid=2017655]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 131ms |
0 / 0 |