在类中具有类对象
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::move
到UART
构造函数中。 否则,您可能只想持有指向Serial
对象的指针或引用。
class UART
{
private:
serial::Serial& _serial;
public:
UART(serial::Serial& serial_port) : _serial(serial_port) {};
// etc.
};
请注意对象生存期;如果UART
对象的寿命超过Serial
引用,则取消引用已销毁的对象将导致"未定义行为"。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 构造对象的歧义
- 使用"std::unordereded_map"映射到"std::list"对象