通常,标准容器类不打算从例如他们有非虚拟的破坏者。
但是,我注意到std::array
根本没有定义析构函数(至少在GNU库中)。
这是否意味着std::array
是安全的?
我不打算重载其任何成员函数,只需添加一些成员函数(主要是将其用作固定大小的队列)。
答案 0 :(得分:4)
仅当您要使用多态并将 ./bin/kafka-topics.sh --zookeeper zookeeper:2181 --describe --topics-with-overrides
Topic:__consumer_offsets PartitionCount:50 ReplicationFactor:3 Configs:segment.bytes=104857600,cleanup.policy=compact,compression.type=producer
Topic:topic_1 PartitionCount:3 ReplicationFactor:3 Configs:retention.ms=3600000
Topic:topic_2 PartitionCount:3 ReplicationFactor:3 Configs:retention.ms=3600000
Topic:topic_3 PartitionCount:3 ReplicationFactor:3 Configs:retention.ms=3600000,retention.bytes=104857600
的新类用作delete
时,才需要虚拟析构函数。这可能不是您的用例。如果是这样,那您就不走运了。
不知道您需要多少现有的std::array
功能,因此这可能不是您的一个好选择,但是通用建议是更喜欢使用组合而不是继承。将std::array
用作添加所需的新功能并公开所需的现有std::array
功能的类的成员。
答案 1 :(得分:4)
从具有非虚拟析构函数 non-publicly 的类派生是安全的。只是公共继承可能不安全。
std::array
具有析构函数,无论是否已声明析构函数。所有类都有析构函数。如果基类析构函数不是虚拟的,则始终 UB通过基类指针删除对象。 std::array
在这方面没有什么不同。