Что происходит при инициализации этого объекта? - PullRequest
0 голосов
/ 06 июня 2018
MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork);

Может ли кто-нибудь объяснить, что здесь делается по сравнению с более традиционным client(mqttNetwork); или чем-то вроде MQTTNetwork *mqttNetwork = new mqttNetwork();?

Что я также пытаюсь сделать, это изменить эту строку кода вчто-то, что я мог бы инициализировать аналогично MQTTNetwork *mqttNetwork = new mqttNetwork();, чтобы я мог назначить новый объект указателю из цикла, так как этот код будет использоваться во встроенном приложении с бесконечным циклом, где объект должен сохраняться между итерациями цикла.

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Чтобы дать ответ на первый вопрос: MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork); концептуально совпадает с std::vector<double> numbers(10) или std::unordered_map<int, double> myMap(otherMap.begin(), otherMap.end());

Первая часть - это просто тип объекта, который вы хотите построить, ислучается, что это тип шаблона (точно так же как std::vector), таким образом, вы должны указать аргументы шаблона.

0 голосов
/ 06 июня 2018

Ну, основное различие между упомянутым подходом и подходом указателя состоит в том, что указатель выделяется в куче, в то время как объект client лежит в стеке.

Если определяется client иинициализированный внутри цикла, деструктор будет вызываться после каждого цикла, и объект будет создаваться заново каждый раз, во всяком случае.

Поскольку объект должен сохраняться между итерациями цикла, client, вероятно, определен вне цикла,В этом случае вам может понадобиться поискать, если используемая вами библиотека предоставляет что-то вроде clear() или reset() и способ ввода новых данных в объект.Таким образом, вы могли бы использовать один и тот же объект полностью и просто назначить новые данные.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...