我可以从`std :: array`派生一个类吗?

时间:2018-11-15 16:46:59

标签: c++ queue derived-class stdarray

通常,标准容器类不打算从例如他们有非虚拟的破坏者。

但是,我注意到std::array根本没有定义析构函数(至少在GNU库中)。

这是否意味着std::array是安全的?

我不打算重载其任何成员函数,只需添加一些成员函数(主要是将其用作固定大小的队列)。

2 个答案:

答案 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在这方面没有什么不同。