如何在我的类(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}}类?
答案 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
引用,则取消引用被破坏的对象将导致未定义行为。