这个对象初始化发生了什么?

时间:2018-06-06 06:35:03

标签: c++ oop mqtt

string amnt = "100000000";
        string json = @"
        {
'method': 'submit',
'params': [{
    'secret': 'snL7AcZbKsHm1H7VjeZg7gNS55Xkd',
    'tx_json': {
        'Account': 'rHSqhmuevNJg9ZYpspYHNnQDxraozuCk5p',
        'TransactionType': 'PaymentChannelCreate',
        'Amount': '"+amnt+"',
        'Destination': 'rD6CGd2uL9DZUVDNghMqAfr8doTzKbEtGA',
        'SettleDelay': 86400,
        'PublicKey': '023693F15967AE357D0327974AD46FE3C127113B1110D6044FD41E723689F81CC6',
        'DestinationTag': 20170428
    },
    'fee_mult_max': 1000
}]

        }";

与传统MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork); 或类似client(mqttNetwork);之类的东西相比,有人能解释一下这里做了什么吗?

我也想要完成的是将这行代码修改为可以与MQTTNetwork *mqttNetwork = new mqttNetwork();类似地初始化的内容,以便我可以从循环内部向指针分配新对象,因为此代码将用于具有无限循环的嵌入式应用程序,其中对象需要在循环迭代之间保持。

2 个答案:

答案 0 :(得分:1)

嗯,所提到的方法和指针方法之间的基本区别在于指针是在堆上分配的,而对象client位于堆栈上。

如果在循环中定义并初始化client,则每次循环后都会调用析构函数,并且每次都会新创建对象。

由于对象需要在循环迭代之间保持,client可能在循环外定义。在这种情况下,您可能希望查看您正在使用的库是否提供了clear()reset()函数以及将新数据填充到对象中的方法。这样你就可以一直使用同一个对象,只需分配新数据。

注意:如果你正在使用指针方法,如果可能的话,我会考虑使用智能指针。

答案 1 :(得分:1)

为第一个问题提供答案:MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork);在概念上与std::vector<double> numbers(10)std::unordered_map<int, double> myMap(otherMap.begin(), otherMap.end());

相同

第一部分只是你想要构造的对象的类型,它碰巧是一个模板类型(就像std::vector),因此要求你拼出模板参数。