【发布时间】:2017-04-28 01:33:32
【问题描述】:
#include <iostream>
using namespace std;
struct Base
{
virtual ~Base()
{
cout << "~Base(): " << b << endl;
}
int b = 1;
};
struct Derived : Base
{
~Derived() override
{
cout << "~Derived(): " << d << endl;
}
int d = 2;
};
int main()
{
Base* p = new Derived[4];
delete[] p;
}
输出如下:(Visual Studio 2015 with Clang 3.8)
~Base(): 1
~Base(): 2
~Base(): -2071674928
~Base(): 1
为什么多态性不适用于 C++ 中的数组?
【问题讨论】:
-
多态只能通过指针起作用,数组的元素不是指针,它们是值类型。您将需要一个指针数组并分别删除它们。 (或智能指针向量)
-
我同意@Galik 的评论,但它对我来说很好,正确的多态行为。 sh-4.2$ g++ -std=c++11 -o main *.cpp ~Derived(): 2~Base(): 1 ~Derived(): 2~Base(): 1~Derived(): 2~Base (): 1 ~Derived(): 2~Base(): 1
-
这不起作用,因为数组使用指针算法来访问数组 els,在你的情况下是 sizeof(Base) 而另一方面,你的数组中的一个元素是 sizeof(Derived) 访问时的结果数组 el 你会在错误的地址结束。
-
在这里检查了相同的代码:- tutorialspoint.com/compile_cpp11_online.php ......工作正常吗?为什么?
-
这段代码没有意义。想想
sizeof(*p)。
标签: c++ polymorphism standards virtual destructor