C++ 对象初始化过程中发生了什么? MQTT::客户端(mqttNetwork);
有谁能解释一下与更传统的C++ 对象初始化过程中发生了什么? MQTT::客户端(mqttNetwork);,c++,oop,mqtt,C++,Oop,Mqtt,有谁能解释一下与更传统的客户机(mqttNetwork)相比,这里正在做什么或类似于MQTTNetwork*MQTTNetwork=new MQTTNetwork() 我还试图完成的是将这行代码修改成我可以初始化的东西,类似于MQTTNetwork*MQTTNetwork=new MQTTNetwork()这样我就可以从循环内部为指针分配一个新对象,因为这段代码将用于具有无限循环的嵌入式应用程序中,其中对象需要在循环迭代之间保持不变。,上述方法与指针方法的基本区别在于,指针分配在堆上,而对象客户
客户机(mqttNetwork)相比,这里正在做什么代码>或类似于MQTTNetwork*MQTTNetwork=new MQTTNetwork()代码>
我还试图完成的是将这行代码修改成我可以初始化的东西,类似于MQTTNetwork*MQTTNetwork=new MQTTNetwork()代码>这样我就可以从循环内部为指针分配一个新对象,因为这段代码将用于具有无限循环的嵌入式应用程序中,其中对象需要在循环迭代之间保持不变。,上述方法与指针方法的基本区别在于,指针分配在堆上,而对象客户机位于堆栈上
如果client
正在循环中定义和初始化,则每次循环后都会调用析构函数,并且每次都会新创建对象
由于对象需要在循环迭代之间持久化,client
可能是在循环之外定义的。在这种情况下,您可能需要查找正在使用的库是否提供了clear()
或reset()
函数以及向对象填充新数据的方法。这样,您就可以一直使用同一对象,只需分配新数据
<强>注:< /强>如果您使用指针方法,如果可能的话,我会考虑使用智能指针。< /P> < P>提供第一个问题的答案:<代码> MQTT::客户端客户端(MQTTNET);
在概念上与std::vector number(10)
或std::无序映射myMap(otherMap.begin(),otherMap.end())相同代码>
第一部分只是您想要构造的对象的类型,它恰好是一种模板类型(就像std::vector
),因此需要您详细说明模板参数。智能指针似乎非常有用,以前从未听说过。无论如何,您能解释一下MQTT::Client
部分的作用吗?此外,由于我正在尝试做的工作,如果出现某种情况,我需要偶尔从循环中创建一个全新的客户机对象-库没有重置或类似的功能。因此,我希望指针在循环之外定义,这样我就可以给它分配新的对象。我不确定你对模板有多熟悉,但不妨看看(例如,oder)MQTT::Client
基本上只是定义了一个模板的特定实例化,模板参数是MQTTNetwork
和Countdown
。这就清楚多了!如何使用客户端(mqttNetwork)代码>比客户端(mqttNetwork)更传统代码>?因为它前面有整个MQTT::Client
部分,我无法理解它的含义。这就是您要声明的变量的类型,就像MQTTNetwork*
是MQTTNetwork
的类型一样。顺便说一句,你使用指针和手动内存分配的理由是没有意义的。您不需要指针就可以指定新对象。大大简化了,但原则上相同,您也不需要指针来执行类似inta=3;a=5代码>不需要使用指针的好处,我想我有点累了。无论如何,由于您和KorbenDose的回答,这个问题现在更清楚了。client(mqttNetwork)代码>将是一个语法错误(除非已经定义了client
)
MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork);