diff options
chore(message): Implement rule of 4 and move implementations from header to source
1 files changed, 31 insertions, 3 deletions
| -rw-r--r-- | src/message.cpp | 34 |
diff --git a/src/message.cpp b/src/message.cpp index af3168c..ee1d8fe 100644 --- a/src/message.cpp +++ b/src/message.cpp @@ -1,15 +1,43 @@ #include <cstring> #include "message.h" +/* Private */ + +void Message::free() { + delete[] this->msg; +} + +void Message::copyFrom(const Message& other) { + this->can_id = other.can_id; + this->size = other.size; + this->received = other.received; + + this->msg = new unsigned char[this->size]; + std::memcpy(this->msg, other.msg, this->size); +} + +/* Public */ + Message::Message(unsigned int can_id, const Frame& first_frame) : can_id(can_id), received(0) { this->size = first_frame.get_size(); this->msg = new unsigned char[this->size]; this->receive_frame(first_frame); } -Message::Message(const Message& rhs) : can_id(rhs.can_id), size(rhs.size), received(rhs.received) { - this->msg = new unsigned char[this->size]; - std::memcpy(this->msg, rhs.msg, this->size); +Message::~Message() { + this->free(); +} + +Message::Message(const Message& other) { + this->copyFrom(other); +} + +Message& Message::operator=(const Message& other) { + if (this != &other) { + this->free(); + this->copyFrom(other); + } + return *this; } void Message::receive_frame(const Frame& f) { |
