【发布时间】:2016-03-21 09:22:28
【问题描述】:
有什么区别:
class Derived : public std::vector<Base> {};
和
std::vector<Base> Derived;
?
提前致谢。
【问题讨论】:
-
蓝图和建筑有什么区别?
有什么区别:
class Derived : public std::vector<Base> {};
和
std::vector<Base> Derived;
?
提前致谢。
【问题讨论】:
在第一种情况下,Derived 是一个可用于声明变量的类。第二个Derived 是std::vector<Base> 类型的变量名。
在类的情况下,可以使用以下代码产生未定义的行为:
void deleter(std::vector<Base>* ptr)
{
delete ptr;
}
void buggy()
{
auto ptr = new Derived();
// ... operations on ptr.
deleter(ptr); // Oops.
}
问题是std::vector 没有虚拟析构函数,所以
删除是未定义的行为。
【讨论】:
这完全是两种不同的东西。当您派生一个新类时,您可以添加功能并更改行为。 如果你把派生类留空,结果是一样的,但如果你想在将来改变它,它会更好
【讨论】: