【发布时间】:2014-08-08 15:06:30
【问题描述】:
我检查了这段代码,我在函数 func() 的末尾看到了 基类的析构函数被调用了两次。 我不明白为什么? 谢谢你。。
class base {
public:
base(){cout << "ctor of base\n";}
~base(){cout << "d-ctor of base\n";}
};
class derived: public base
{
public:
derived(){cout << "ctor of derived\n";}
~derived(){cout << "d-ctor of derived\n";}
};
void func(base ob)
{
cout << "inside func\n";
}
void main()
{
derived ob;
func(ob);
system("pause");
}
【问题讨论】:
-
@Csq 是的,它被切片了,但这并不能解释 两次 调用
~base()。 -
当多态性受到威胁时,不要忘记虚拟析构函数。这里
~base()应该是virtual ~base() -
@Angew 我已经写了一个更详细的答案。
-
你确定这两种破坏都发生在“函数
func()”的末尾,即在调用system()之前?
标签: c++ inheritance destructor