Class inherited from a vector of itself
C++中有可能声明这样的类:
1 2 3 4 5 6
| class A : public std::vector<A>
{
public:
A() = default;
~A() = default;
} |
好吧,从stl容器继承是不好的,隐藏非虚拟析构函数是不好的。
但是这样的课程有什么目的吗?它可以用来做什么?
- 推荐阅读:en.wikipedia.org/wiki/cur奇地重复使用模板模式
- 另请参见:stackoverflow.com/questions/4353203/&hellip;
- @inetknght,为了获得CRTP的好处,基地需要意识到这一点。std::vector<>当然不是。
- 当然,当然。但是OP问:"这样的课程有什么目的吗?"我的意思是"一个奇怪的循环模板模式有什么目的吗?"
只要类被识别为基类,事情就会变得很糟糕(因为运算符或函数接受了基类)。只是不要这样做。修改/扩展尝试的示例尝试可能是std::string-没有。
由于std::vector<>的析构函数是非虚拟的,因此没有必要使派生类的析构函数成为虚拟的——当使用base时,类将不会表现出多态性。
但是,使用非多态继承可能会有一些好处,例如,通过覆盖一些vector函数。
- 对不起,我把virtual取下来了。
- 但是,将A声明为从A的载体继承的原因是什么?利润是多少?只是为了压倒一切?
- @弗拉登,我现在不是。它在语法上与crtp相似(参见其中一条注释),但实际上不是,因为std::vector不支持crtp。