9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
|
|||||||||||
1 | |||||||||||
Std::string в union -> segmentation fault17.05.2015, 23:11. Показов 2324. Ответов 11
Метки нет Все метки)
(
Если создать простой класс с union'ом внутри которого есть пользовательский тип
0
|
|
17.05.2015, 23:11 | |
Ответы с готовыми решениями:
11
string segmentation fault ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri Segmentation fault
|
17110 / 9129 / 2236
Регистрация: 30.01.2014
Сообщений: 15,916
|
||||||
17.05.2015, 23:29 | 3 | |||||
![]() Решение
OrmaJever,
2
|
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
|
|
17.05.2015, 23:49 [ТС] | 4 |
DrOffset, отлично, это работает. А разве нельзя вызвать деструктор string в деструкторе ~value() ?
0
|
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
|
||||||
18.05.2015, 00:03 [ТС] | 6 | |||||
castaway, вообще да. Но это я показал не весь union, и string там ещё не самый крупный (sizeof показывает 4б)
0
|
17110 / 9129 / 2236
Регистрация: 30.01.2014
Сообщений: 15,916
|
|
18.05.2015, 00:08 | 7 |
Можно, но только в том случае, если он действительно там сохранен (а не, int например). Если там на самом деле int, то при вызове деструктора String будет UB. Из деструктора самого union ты никак это не определишь, поэтому выход один: вызывать извне с предварительной проверкой.
Добавлено через 1 минуту А ты в курсе про то, что union хранит всегда только какой-то один из своих членов?
0
|
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
|
|
18.05.2015, 00:11 [ТС] | 8 |
DrOffset, в общем я понял, перед очисткой нужно убедиться что там именно этот класс задействован, это я понял, дальше буду уже сам крутиться. У меня снаружи есть переменная которая содержит какой тип записан в union от неё и буду отталкиваться
0
|
17110 / 9129 / 2236
Регистрация: 30.01.2014
Сообщений: 15,916
|
|
18.05.2015, 00:13 | 9 |
0
|
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
|
|
18.05.2015, 00:13 [ТС] | 10 |
ну да, я про это и писал, что так размер самого большого std::map, а если это будет структура или класс то будет сумма всех свойств. Я это к тому написал что экономия существенная.
0
|
17110 / 9129 / 2236
Регистрация: 30.01.2014
Сообщений: 15,916
|
|
18.05.2015, 00:16 | 11 |
Ок. Просто нужно было удостовериться, что ты понимаешь на что идешь
![]() Вообще посмотри boost::variant. Он как раз эту задачу решает.
0
|
2760 / 1914 / 569
Регистрация: 05.06.2014
Сообщений: 5,569
|
|
18.05.2015, 00:26 | 12 |
Думается мне, json все же правильнее делать через наследование и виртуальные функции. Алсо, раз уж делаете не через наследование, то в мап и вектор можно класть JType, а не указатель на него.
0
|
18.05.2015, 00:26 | |
Помогаю со студенческими работами здесь
12
Segmentation fault
Segmentation Fault Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |