构造函数中的实例化对象时的C ++类成员作用域

人民银行

我在类构造函数中有以下代码:

MqttSensorInterface::MqttSensorInterface(Client& client, String sensorTopic)
{
  this->mqttClient = PubSubClient(client);
  this->sensorTopic = sensorTopic;
  this->askMeasureTopic = sensorTopic + "/askmeasure";
  this->publishMeasureTopic = sensorTopic + "/measure";
}

但是在MqttSensorInterface创建对象后使用构造函数之后,构造函数中PubSubClient实例化对象就被破坏了(PubSubClient调用了构函数)。我是C ++的新手,不知道这段代码是否有问题。由于PubSubClient对象是在构造函数中实例化的,但类成员mqttClient设置为该对象,因此它的作用域是什么?

PubSubClient构造函数代码:

PubSubClient::PubSubClient(Client& client) {
    this->_state = MQTT_DISCONNECTED;
    setClient(client);
    this->stream = NULL;
    this->bufferSize = 0;
    setBufferSize(MQTT_MAX_PACKET_SIZE);
    setKeepAlive(MQTT_KEEPALIVE);
    setSocketTimeout(MQTT_SOCKET_TIMEOUT);
}

编辑

通过以下方式使用成员初始化器列表解决:

MqttSensorInterface::MqttSensorInterface( Client& client, String sensorTopic): mqttClient(client)
来自莫斯科的弗拉德

当构造函数的主体

MqttSensorInterface::MqttSensorInterface(String sensorTopic)
{
  WiFiClient wiFiClient;
  this->mqttClient = PubSubClient(wifiClient);
  this->sensorTopic = sensorTopic;
  this->askMeasureTopic = sensorTopic + "/askmeasure";
  this->publishMeasureTopic = sensorTopic + "/measure";
}

获取控件,该控件已使用默认构造函数创建了数据成员mqttClient,PubSubClient前提是在类定义中没有该数据成员的显式初始化程序,

所以在这句话里面

this->mqttClient = PubSubClient(wifiClient);

PubSubClient通过构造函数的显式调用创建该类型的临时对象,PubSubClient(wifiClient)this->mqttClient使用复制分配操作符或移动分配操作符将该临时对象分配给数据成员在语句执行结束时,临时对象被销毁。

如果可能,可以在构造数据成员的过程中在构造函数的mem-initializer列表中初始化数据成员。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C++在初始化类实例时隐式调用类成员的构造函数

来自分类Dev

PHP-在类的构造函数中初始化对象的实例,在静态成员中进行访问

来自分类Dev

从类构造函数实例化对象的集合

来自分类Dev

避免类作用域,以便将成员函数作为函数指针传递

来自分类Dev

当派生类退出作用域时,基成员是否会被销毁?

来自分类Dev

C ++类成员是一个需要构造函数的对象……这需要一个函数实例化

来自分类Dev

在作用域末尾自动调用成员函数

来自分类Dev

依赖注入:在无参数构造函数中实例化具体类时,您会失去什么

来自分类Dev

构造函数接受参数时如何实例化模板类

来自分类Dev

使用构造函数参数实例化类对象与不使用参数C *实例*运算符之间的区别

来自分类Dev

在C ++中的模板实例化中将带有构造函数的类用作类型参数

来自分类Dev

如何在C#中调用通过Structure Map实例化的类的构造函数

来自分类Dev

C ++从成员对象访问实例化类的其他成员

来自分类Dev

Python:类内的函数作用域

来自分类Dev

Python:类内的函数作用域

来自分类Dev

c ++在成员初始化中,在构造函数中传递新对象

来自分类Dev

在该类的构造函数中实例化类变量

来自分类Dev

显式实例化的类模板中的自动构造函数

来自分类Dev

访问在MainWindow()构造函数中实例化的类

来自分类Dev

C#-在构造函数上实例化类的StackOverflowException

来自分类Dev

如何从具体子类中的重写方法访问通过抽象类中的构造函数实例化的对象的属性?

来自分类Dev

如果默认构造函数是超类,则默认构造函数如何实例化对象,而无参数构造函数的主体为空?

来自分类Dev

使用自定义构造函数作为Objective C类成员初始化C ++类的实例吗?

来自分类Dev

分配函数作用域成员是否会导致内存泄漏?

来自分类Dev

在静态方法中实例化非静态类(上下文),构造函数以对象类型为参数

来自分类Dev

C ++-如何在另一个类中使用私有构造函数实例化对象

来自分类Dev

在构造函数中反序列化const成员对象

来自分类Dev

在构造函数中反序列化const成员对象

来自分类Dev

在C ++中,是否可以分别声明和实例化不提供默认构造函数的类的实例,并将其实例化(两个步骤)

Related 相关文章

  1. 1

    C++在初始化类实例时隐式调用类成员的构造函数

  2. 2

    PHP-在类的构造函数中初始化对象的实例,在静态成员中进行访问

  3. 3

    从类构造函数实例化对象的集合

  4. 4

    避免类作用域,以便将成员函数作为函数指针传递

  5. 5

    当派生类退出作用域时,基成员是否会被销毁?

  6. 6

    C ++类成员是一个需要构造函数的对象……这需要一个函数实例化

  7. 7

    在作用域末尾自动调用成员函数

  8. 8

    依赖注入:在无参数构造函数中实例化具体类时,您会失去什么

  9. 9

    构造函数接受参数时如何实例化模板类

  10. 10

    使用构造函数参数实例化类对象与不使用参数C *实例*运算符之间的区别

  11. 11

    在C ++中的模板实例化中将带有构造函数的类用作类型参数

  12. 12

    如何在C#中调用通过Structure Map实例化的类的构造函数

  13. 13

    C ++从成员对象访问实例化类的其他成员

  14. 14

    Python:类内的函数作用域

  15. 15

    Python:类内的函数作用域

  16. 16

    c ++在成员初始化中,在构造函数中传递新对象

  17. 17

    在该类的构造函数中实例化类变量

  18. 18

    显式实例化的类模板中的自动构造函数

  19. 19

    访问在MainWindow()构造函数中实例化的类

  20. 20

    C#-在构造函数上实例化类的StackOverflowException

  21. 21

    如何从具体子类中的重写方法访问通过抽象类中的构造函数实例化的对象的属性?

  22. 22

    如果默认构造函数是超类,则默认构造函数如何实例化对象,而无参数构造函数的主体为空?

  23. 23

    使用自定义构造函数作为Objective C类成员初始化C ++类的实例吗?

  24. 24

    分配函数作用域成员是否会导致内存泄漏?

  25. 25

    在静态方法中实例化非静态类(上下文),构造函数以对象类型为参数

  26. 26

    C ++-如何在另一个类中使用私有构造函数实例化对象

  27. 27

    在构造函数中反序列化const成员对象

  28. 28

    在构造函数中反序列化const成员对象

  29. 29

    在C ++中,是否可以分别声明和实例化不提供默认构造函数的类的实例,并将其实例化(两个步骤)

热门标签

归档