在类中具有类对象

Having Class object inside the Class

本文关键字:对象      更新时间:2023-10-16

如何在我的类(UART(对象中正确使用类对象(serial(?

我要复制的类对象在"私有"中声明了其复制构造函数,我的编译器说:

‘serial::Serial::Serial(const serial::Serial&)’ is private within this context
     UART::UART(const serial::Serial& serial_port) : _serial(serial_port), _letter(" ") {}

和定义

serial::Serial::Serial(const serial::Serial&)

是:

private:
  // Disable copy constructors
  Serial(const Serial&);

这是我的类头文件:

 class UART
    {
    private:
        serial::Serial _serial;
    public:
        UART(const serial::Serial& serial_port) : _serial(serial_port) {};
        ~UART();
        bool read(std::string &data);
        bool write(std::string &data);
    };

如您所见,我已经声明了一个名为 _serial 的类对象,我只想在类中使用此对象UART我通常通过复制构造方法执行此操作(serial对象传递给 UART 的构造并复制它(

因此,如果 serial 类不允许复制构造函数(因为它已在私有部分中声明(,我如何复制它(或者可能是其他方法?(并在我的 UART 类中使用此对象?

如何复制它

你不能,但你可以移动它(不太可能,从你所说的,这看起来像 C++11 之前的代码(。

或者可能是其他方法?

要么

不复制(例如,保留指针或对它的引用(,要么构造一个新的serial对象,或者不复制它,而是通过引用/指针将其传递给需要它的方法。

据推测,Serial类禁用复制,因为它表示物理设备;复制对象会中断与设备的通信,因为副本不知道原始对象的状态。

如果UART应该拥有Serial对象,则可以将其std::moveUART构造函数中。 否则,您可能只想持有指向Serial对象的指针或引用。

class UART
{
private:
    serial::Serial& _serial;
public:
    UART(serial::Serial& serial_port) : _serial(serial_port) {};
    // etc.
};

请注意对象生存期;如果UART对象的寿命超过Serial引用,则取消引用已销毁的对象将导致"未定义行为"。