Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Передача большого количества аргументов между классами, потоками
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
RazrFalcon
Нужно передать: 2-а QStringList, QString, QList<bool>, и возможно что-то еще.
Как лучше это сделать? Передавать кучу аргументов как то тупо.
Правильно ли будет, создать свой собственный маленький класс, который будет сначала заполнятся, потом пересылаться, а затем считываться?
silver47
Гм. Возможно, класс слишком громоздко.... тут за глаза струтуры хватит, хотя не знаю подоплеку передачи данных в Qt, возможно, будет даже экономнее передвать впрямую строки. Я бы по старинке -структуру или указатель на нее бы передал, дешево и сердито.
RazrFalcon
Дык разницы то между структурой с классом фактически нет, уж лучше класс.
ilyabvt
Цитата
Дык разницы то между структурой с классом фактически нет, уж лучше класс.

Угу, только передавать лучше через указатель.
RazrFalcon
То есть передавать только указатель, а не весь класс?

Имеено:
void someFunc(MyClass *myClass);
или хватит и:
void someFunc(const MyClass &myClass);
? А то я в этом путаюсь <_<
ilyabvt
Цитата(RazrFalcon @ 12.11.2011, 2:07) *
То есть передавать только указатель, а не весь класс?

Имеено:
void someFunc(MyClass *myClass);
или хватит и:
void someFunc(const MyClass &myClass);
? А то я в этом путаюсь <_<


В первом случае через указатель, во втором по ссылке. Хватит и ссылки, и даже без "const".
RazrFalcon
Как я понимаю, ссылка лучше, так как если через указатель передавать, то нужно потом еще delete вызывать. Да?
ilyabvt
Цитата
если через указатель передавать, то нужно потом еще delete вызывать. Да?

Нет. Если вызвать delete то уничтожиться объект на который будет указывать указатель, т.е. ваш класс. А зачем вам его удалять? Сам же указатель, как переменная, уничтожиться при выходе из функции.
RazrFalcon
Ну так он нужен чтобы передать инфу, после передачи он больше не нужен. Просто будет еще морока с удалением. А так, как я понял, ссылка даст то же результат.
ilyabvt
Цитата
А так, как я понял, ссылка даст то же результат.

В целом, да. Различаться будет только вызов функции.
RazrFalcon
Все ясно, спасибо.
ssoft
Если хочется передавать собственную структуру, то, однозначно, лучше.
Особенно, если планируется это использовать в сигнал-слот взаимодействии.

    void someFunc (const MyClass &myClass);


Связать signal(const MyClass &myClass) можно с slot(const MyClass &myClass) или с slot(MyClass myClass) любым способом,
а вот signal(MyClass &myClass) только с slot(MyClass &myClass) и, по моему, только Qt::DirectConnection.

Если передавать через "голый" указатель, то необходимо следить за корректным удалением данных.
Если хочется все-таки использовать указатель, тогда уж "умный", например, QSharedPointer.
Передача структуры через "умный" указатель м.б. полезна при многопоточном программировании.

Цитата
В первом случае через указатель, во втором по ссылке. Хватит и ссылки, и даже без "const".


Ссылка без "const", если данные не изменяются внутри вызываемого метода, мягко сказать не культурно или небрежно.
Нужно также учесть, что в Qt обращение к не константным методам контейнеров, и всем классам Qt, использующим внутри QSharedData, могут быть связаны с полным копированием внутренних данных.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.