在类内部具有Class对象

时间:2019-04-03 15:37:13

标签: c++

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

我要复制的类对象的复制构造函数在“私有”中声明,并且我的编译器说:

‘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类内使用该对象,我通常通过复制构造方法(传递{{1} }反对serial的构造并将其复制)

因此,如果UART类不允许复制构造函数(因为已经在私有部分中声明了它),我该如何复制它(或者可能是其他方法?)并在我的{{ 1}}类?

2 个答案:

答案 0 :(得分:0)

  

我如何复制它

您不能,但是您可以移动它(不太可能,就像您所说的那样,它看起来像C ++ 11之前的代码)。

  

还是其他方法?

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

答案 1 :(得分:0)

大概是Serial类,因为它代表物理设备,所以禁止复制。复制对象会中断与设备的通信,因为副本不知道原始对象的状态。

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

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

注意对象的生命周期;如果您的UART对象超过了Serial引用,则取消引用被破坏的对象将导致未定义行为。