mirror of
https://github.com/esphome/esphome.git
synced 2026-05-28 13:37:24 +08:00
[api] Remove virtual destructor from ProtoMessage (#14393)
This commit is contained in:
@@ -322,7 +322,6 @@ enum ZWaveProxyRequestType : uint32_t {
|
|||||||
|
|
||||||
class InfoResponseProtoMessage : public ProtoMessage {
|
class InfoResponseProtoMessage : public ProtoMessage {
|
||||||
public:
|
public:
|
||||||
~InfoResponseProtoMessage() override = default;
|
|
||||||
StringRef object_id{};
|
StringRef object_id{};
|
||||||
uint32_t key{0};
|
uint32_t key{0};
|
||||||
StringRef name{};
|
StringRef name{};
|
||||||
@@ -336,28 +335,29 @@ class InfoResponseProtoMessage : public ProtoMessage {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
~InfoResponseProtoMessage() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
class StateResponseProtoMessage : public ProtoMessage {
|
class StateResponseProtoMessage : public ProtoMessage {
|
||||||
public:
|
public:
|
||||||
~StateResponseProtoMessage() override = default;
|
|
||||||
uint32_t key{0};
|
uint32_t key{0};
|
||||||
#ifdef USE_DEVICES
|
#ifdef USE_DEVICES
|
||||||
uint32_t device_id{0};
|
uint32_t device_id{0};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
~StateResponseProtoMessage() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CommandProtoMessage : public ProtoDecodableMessage {
|
class CommandProtoMessage : public ProtoDecodableMessage {
|
||||||
public:
|
public:
|
||||||
~CommandProtoMessage() override = default;
|
|
||||||
uint32_t key{0};
|
uint32_t key{0};
|
||||||
#ifdef USE_DEVICES
|
#ifdef USE_DEVICES
|
||||||
uint32_t device_id{0};
|
uint32_t device_id{0};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
~CommandProtoMessage() = default;
|
||||||
};
|
};
|
||||||
class HelloRequest final : public ProtoDecodableMessage {
|
class HelloRequest final : public ProtoDecodableMessage {
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -452,7 +452,6 @@ class DumpBuffer {
|
|||||||
|
|
||||||
class ProtoMessage {
|
class ProtoMessage {
|
||||||
public:
|
public:
|
||||||
virtual ~ProtoMessage() = default;
|
|
||||||
// Default implementation for messages with no fields
|
// Default implementation for messages with no fields
|
||||||
virtual void encode(ProtoWriteBuffer &buffer) const {}
|
virtual void encode(ProtoWriteBuffer &buffer) const {}
|
||||||
// Default implementation for messages with no fields
|
// Default implementation for messages with no fields
|
||||||
@@ -463,6 +462,11 @@ class ProtoMessage {
|
|||||||
virtual const char *dump_to(DumpBuffer &out) const = 0;
|
virtual const char *dump_to(DumpBuffer &out) const = 0;
|
||||||
virtual const char *message_name() const { return "unknown"; }
|
virtual const char *message_name() const { return "unknown"; }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// Non-virtual: messages are never deleted polymorphically.
|
||||||
|
// Protected prevents accidental `delete base_ptr` (compile error).
|
||||||
|
~ProtoMessage() = default;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Base class for messages that support decoding
|
// Base class for messages that support decoding
|
||||||
@@ -482,6 +486,7 @@ class ProtoDecodableMessage : public ProtoMessage {
|
|||||||
static uint32_t count_repeated_field(const uint8_t *buffer, size_t length, uint32_t target_field_id);
|
static uint32_t count_repeated_field(const uint8_t *buffer, size_t length, uint32_t target_field_id);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
~ProtoDecodableMessage() = default;
|
||||||
virtual bool decode_varint(uint32_t field_id, ProtoVarInt value) { return false; }
|
virtual bool decode_varint(uint32_t field_id, ProtoVarInt value) { return false; }
|
||||||
virtual bool decode_length(uint32_t field_id, ProtoLengthDelimited value) { return false; }
|
virtual bool decode_length(uint32_t field_id, ProtoLengthDelimited value) { return false; }
|
||||||
virtual bool decode_32bit(uint32_t field_id, Proto32Bit value) { return false; }
|
virtual bool decode_32bit(uint32_t field_id, Proto32Bit value) { return false; }
|
||||||
|
|||||||
@@ -2473,9 +2473,6 @@ def build_base_class(
|
|||||||
out = f"class {base_class_name} : public {parent_class} {{\n"
|
out = f"class {base_class_name} : public {parent_class} {{\n"
|
||||||
out += " public:\n"
|
out += " public:\n"
|
||||||
|
|
||||||
# Add destructor with override
|
|
||||||
public_content.insert(0, f"~{base_class_name}() override = default;")
|
|
||||||
|
|
||||||
# Base classes don't implement encode/decode/calculate_size
|
# Base classes don't implement encode/decode/calculate_size
|
||||||
# Derived classes handle these with their specific field numbers
|
# Derived classes handle these with their specific field numbers
|
||||||
cpp = ""
|
cpp = ""
|
||||||
@@ -2483,6 +2480,8 @@ def build_base_class(
|
|||||||
out += indent("\n".join(public_content)) + "\n"
|
out += indent("\n".join(public_content)) + "\n"
|
||||||
out += "\n"
|
out += "\n"
|
||||||
out += " protected:\n"
|
out += " protected:\n"
|
||||||
|
# Non-virtual protected destructor prevents accidental polymorphic deletion
|
||||||
|
protected_content.insert(0, f"~{base_class_name}() = default;")
|
||||||
out += indent("\n".join(protected_content))
|
out += indent("\n".join(protected_content))
|
||||||
if protected_content:
|
if protected_content:
|
||||||
out += "\n"
|
out += "\n"
|
||||||
|
|||||||
Reference in New Issue
Block a user