我有一个简单的 Message 类和一个简单的 SerialPort 类。我还有一个特定的消息子类和一个特定的串口子类(CustomMessage & CustomSerialPort):
class Message
{
public:
uint8 getLength() const ( return m_length; }
const uint8* getData() const { return m_contents; }
...
}
class SerialPort
{
public:
bool OpenSerial(int32& errcode);
bool ReadFromSerial(int32& errcode, Message& msg);
bool WriteToSerial(int32& errcode, Message& msg,
uint32* const nBytesWritten);
...
}
这是自定义类。请注意,我重载了 WriteToSerial() 以获取 CustomMessage 而不仅仅是 Message。
class CustomSerialPort : public SerialPort
{
public:
bool WriteToSerial(int32& errcode, CustomMessage& msg,
uint32* const nBytesWritten);
...
}
class CustomMessage : public Message
{
// lots of stuff for messages to specific device
}
同样重要的是,CustomSerial::WriteToSerial 和 CustomMessage::toMessage() 的实现
bool CustomSerialPort::WriteToSerial(int32& errcode, CustomMessage& msg,
uint32* const nBytesWritten)
{
SerialPort::WriteToSerial(errcode, msg.toMessage(), nBytesWritten);
}
Message& CustomMessage::toMessage()
{
Message* msg = new Message(m_contents, m_length);
return *msg;
}
可以看到我调用了SerialPort类的WriteToSerial,给它发送了一个已经转换为Message的CustomMessage。
我的问题是:我应该在哪里删除我创建的传递给 SerialPort::WriteToSerial 的消息?
或者,我应该做更多这样的事情:
bool CustomSerialPort::WriteToSerial(int32& errcode, CustomMessage& msg,
uint32* const nBytesWritten)
{
// don't use new
Message m(msg);
SerialPort::WriteToSerial(errcode, m, nBytesWritten);
// deleted when goes out of scope
}
然后,使用选项 2,如果我的理解是正确的,我只需要创建一个带有 CustomMessage 参数的 Message 构造函数......等等......这看起来很奇怪......在父类构造函数中采用子类对象参数。我需要重新考虑这个吗?