Форум программистов, компьютерный форум CyberForum.ru

Пользовательские типы в union - Нужно ли инстализировать как-то String, Object или Array? - C++

Восстановить пароль Регистрация
 
OrmaJever
 Аватар для OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
12.08.2014, 13:52     Пользовательские типы в union - Нужно ли инстализировать как-то String, Object или Array? #1
Во всех примерах в union используют простые типы (int, float), а если в union будет пользовательский тип, ну например так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    union value {
        bool                    Bool;
        int                     Int;
        double              Double;
        string              String;
        map< string, value * >          Object;
        vector< value * >       Array;
 
        value operator=(const value&){}
        value(const value&){}
        value(){}
        ~value(){}
    } *json;
то при создании экземпляра
C++
1
value *obj = new value();
нужно ли инстализировать как-то String, Object или Array? ну например
C++
1
obj->Object = map< string, value * >();
И ещё один вопрос, на кой чёрт в union нужно методы???? Я не мог создать экземпляр пока не добавил пару конструкторов, деструктор и оператор копирования. Что без них вообще никак?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2014, 13:52     Пользовательские типы в union - Нужно ли инстализировать как-то String, Object или Array?
Посмотрите здесь:

Union с явными указателями или void*- что выбрать? C++
Нужно чтобы функция в зависимости от условий возвращала string или double C++
C++ Пользовательские типы данных
Linux: initializer-string for array of chars is too long C++
Нужно объяснение - union C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.08.2014, 14:15     Пользовательские типы в union - Нужно ли инстализировать как-то String, Object или Array? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от OrmaJever Посмотреть сообщение
Во всех примерах в union используют простые типы (int, float), а если в union будет пользовательский тип, ну например так
потому что пользовательский тип можно хранить в union только с С++11

Добавлено через 1 минуту
Цитата Сообщение от OrmaJever Посмотреть сообщение
нужно ли инстализировать как-то String, Object или Array? ну например
когда хотим сохранить какое-то значение то нужно, через placement new
Trwsdf
Заблокирован
12.08.2014, 15:53     Пользовательские типы в union - Нужно ли инстализировать как-то String, Object или Array? #3
когда же вы научитесь пользоваться поиском
https://ru.wikipedia.org/wiki/C%2B%2...9_.D1.81_union
OrmaJever
 Аватар для OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
12.08.2014, 18:48  [ТС]     Пользовательские типы в union - Нужно ли инстализировать как-то String, Object или Array? #4
это всё интересно, но во-первых правильно ли я понял что в моём случае для структуры выше конструктор должен быть таким
C++
1
2
3
4
5
6
value::value()
{
    new( &String ) string();
    new( &Array )  vector< value * >();
    new( &Object ) map< string, value * >();
}
а во вторых, а что будет с памятью? Использовать я буду одно значение, а обьекты созданы уже для 3.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.08.2014, 21:38     Пользовательские типы в union - Нужно ли инстализировать как-то String, Object или Array? #5
Цитата Сообщение от OrmaJever Посмотреть сообщение
Использовать я буду одно значение, а обьекты созданы уже для 3.
ну так в том-то и дело что не надо создавать сразу 3, вообще ничего не надо конструировать пока не понадобится что-то сохранить
OrmaJever
 Аватар для OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
12.08.2014, 22:18  [ТС]     Пользовательские типы в union - Нужно ли инстализировать как-то String, Object или Array? #6
Цитата Сообщение от Jupiter Посмотреть сообщение
ну так в том-то и дело что не надо создавать сразу 3, вообще ничего не надо конструировать пока не понадобится что-то сохранить
ну вот я и спрашиваю как правильно это осуществить, перед самой запись конструировать нужный обьект? Если да то как правильно? Просто сейчас при любом из опробованных мной вариантов я получаю Segmentation fault при записи в строку, например

C++
1
2
value *str = new value();
str->String += '.';
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.08.2014, 22:33     Пользовательские типы в union - Нужно ли инстализировать как-то String, Object или Array? #7
Цитата Сообщение от OrmaJever Посмотреть сообщение
ну вот я и спрашиваю как правильно это осуществить, перед самой запись конструировать нужный обьект?
да, это уже 3-й раз, сколько ещё надо об этом написать?
C++
1
2
value *str = new value();
new(&str->String)string(".");
OrmaJever
 Аватар для OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
12.08.2014, 22:45  [ТС]     Пользовательские типы в union - Нужно ли инстализировать как-то String, Object или Array? #8
Цитата Сообщение от Jupiter Посмотреть сообщение
да, это уже 3-й раз, сколько ещё надо об этом написать?
видимо я с первых двух не понял смысла новой конструкции new. Теперь дошло, спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2014, 00:03     Пользовательские типы в union - Нужно ли инстализировать как-то String, Object или Array?
Еще ссылки по теме:

C++ Std::string в union -> segmentation fault
C++ Типы size_t перевести в string
Оператор << и пользовательские типы C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
DrOffset
6459 / 3833 / 885
Регистрация: 30.01.2014
Сообщений: 6,628
13.08.2014, 00:03     Пользовательские типы в union - Нужно ли инстализировать как-то String, Object или Array? #9
Цитата Сообщение от OrmaJever Посмотреть сообщение
новой конструкции new.
Конструкция как раз старая
Yandex
Объявления
13.08.2014, 00:03     Пользовательские типы в union - Нужно ли инстализировать как-то String, Object или Array?
Ответ Создать тему
Опции темы

Текущее время: 19:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru