由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 包子呼唤大牛--问关于C++Destructor的问题 (转载)
相关主题
C++ online Test 一题One C++ question
一个Naive的问题,tree的destruction面经: bloomberg 电面
leetcode上这个链表节点的定义是什么意思?ListNode(int x) : val(x), next(NULL) {}C++ Q65: recompiling (IB)
新Qualcomm面经C++相关的面经
问个C++重新编译的问题小公司web server面经
C++面试问题,高人请进啊~~~c++ class default functions?
请教1个工作面试题准备去BB onsite 了,求bless (undate)
为什么C++的constructor出错可以抛出异常,而destructor出错说说我被面试到的c++题目吧
相关话题的讨论汇总
话题: base话题: derived话题: destructor话题: var1
进入JobHunting版参与讨论
1 (共1页)
w********p
发帖数: 948
1
【 以下文字转载自 Programming 讨论区 】
发信人: whitetulip (白色郁丁香), 信区: Programming
标 题: 问关于C++Destructor的问题
关键字: 'base class' 'destructor' 'case' 'assignment'
发信站: BBS 未名空间站 (Sat Nov 7 01:06:59 2009, 美东)
#include
using namespace std;
class Base
{
public:
Base(){ cout<<"Constructor: Base"< ~Base(){ cout<<"Destructor : Base"< };
class Derived: public Base
{
//Doing a lot of jobs by extending the functionality
public:
Derived(){ cout<<"Constructor: Derived"< ~Derived()
a**********s
发帖数: 588
2
我最近缺包子, 所以有兴趣, 2个包子一条, 总共16个包子吧?
i****h
发帖数: 321
3
非大牛,试着答一下。这题主要是要考非virtual destructor。
g点在这句
Var2 = (Base) *Var;
声明了*Var 是Base的,destructor又不是virtual,所以先要调用
Destructor : Base //4
然后调用其实际类型的destructor。
Destructor : Derived //5
从而又调用了一次Base的destructor
Destructor : Base //6
最后一行就不需要解释了。
a**********s
发帖数: 588
4
int main()
{
Derived *Var = new Derived();
>>>> 这个语句, 分别调用基类和派生类的构造函数, 于是
>>>> Constructor: Base //1
>>>> Constructor: Derived //2
Base Var2;
>>>> 这个语句, 调用基类构造函数, 于是
>>>> Constructor: Base //3
Var2 = (Base) *Var;
>>>> 这个语句有一丝丝复杂, 等号右边产生一个临时Base类型的变量,
>>>> 调用Base类的"拷贝构造函数" Base(const Base&), 但是
>>>> 这个你没有定义, 所以什么都没有打印出来
>>>> 临时变量消灭的时候, 调用析构函数, 于是:
Destructor : Base //4
delete Var;
>>>> 这个比较简单
>>>> Destructor : Derived //5
>>>> Destructor : Base //6
return 0;
>>>> 这个也比较简单, 因为Var1的生命周期随着函数的返回结束
>>>
a**********s
发帖数: 588
5
你快点到了, 但是差了那么一点点---没有解释为什么调用destructor, 却看不到调用
constructor ^_^
而且说的调用destructor的理由也好像怪怪的, 和virtual一点关系都没 :)

【在 i****h 的大作中提到】
: 非大牛,试着答一下。这题主要是要考非virtual destructor。
: g点在这句
: Var2 = (Base) *Var;
: 声明了*Var 是Base的,destructor又不是virtual,所以先要调用
: Destructor : Base //4
: 然后调用其实际类型的destructor。
: Destructor : Derived //5
: 从而又调用了一次Base的destructor
: Destructor : Base //6
: 最后一行就不需要解释了。

i****h
发帖数: 321
6
拜大牛,你的的确清晰多了。

【在 a**********s 的大作中提到】
: 你快点到了, 但是差了那么一点点---没有解释为什么调用destructor, 却看不到调用
: constructor ^_^
: 而且说的调用destructor的理由也好像怪怪的, 和virtual一点关系都没 :)

a**********s
发帖数: 588
7
不敢, 真正的大牛都潜水

【在 i****h 的大作中提到】
: 拜大牛,你的的确清晰多了。
w********p
发帖数: 948
8
谢谢牛牛们,欢迎继续指教,包子for party 1 is done, but it continue for party 2
包子for party 2 也没了,赫赫
g*******y
发帖数: 1930
9
可惜来晚了,被牛人抢了先,没吃到包子。。。
唯一比较tricky的地方就是那个static_cast的地方有临时的base object,死掉
的时候会调用一个destructor

【在 w********p 的大作中提到】
: 谢谢牛牛们,欢迎继续指教,包子for party 1 is done, but it continue for party 2
: 包子for party 2 也没了,赫赫

w********p
发帖数: 948
10
问题继续, 包子继续
class Base
{
public:
Base(){ cout<<"Constructor: Base"< ~Base(){ cout<<"Destructor : Base"< };
class Derived: public Base
{
public:
Derived(){ cout<<"Constructor: Derived"< ~Derived(){ cout<<"Destructor : Derived"< };
int main()
{
Derived Var1;
Base Var2(Var1);
Derived Var3(Var1);
return 0;
}
output:
Constructor: Base
Constructor: Derived
Destructor : Derived
Destructor : Base
Destructor : Base
Destructor : Derived
Destructor : Base
请解释一下

【在 g*******y 的大作中提到】
: 可惜来晚了,被牛人抢了先,没吃到包子。。。
: 唯一比较tricky的地方就是那个static_cast的地方有临时的base object,死掉
: 的时候会调用一个destructor

a**********s
发帖数: 588
11
int main()
{
Derived Var1;
>>>> construct var1
>>>> Constructor: Base
>>>> Constructor: Derived
Base Var2(Var1);
Derived Var3(Var1);
>>>> The construction of above wont print anything
>>>> since the default copy constructs are done silently
return 0;
>>>> UPON RETURN <<<<
>>>> destruct var3
>>>> Destructor : Derived
>>>> Destructor : Base
>>>> destruct var2
Destructor : Base
>>>> destruct var1
Destructor : Derived
Destructor : Base
}
w********p
发帖数: 948
12
谢谢, 解释的好明白哦。还省了我的包子, 赫赫,开心

【在 a**********s 的大作中提到】
: int main()
: {
: Derived Var1;
: >>>> construct var1
: >>>> Constructor: Base
: >>>> Constructor: Derived
: Base Var2(Var1);
: Derived Var3(Var1);
: >>>> The construction of above wont print anything
: >>>> since the default copy constructs are done silently

m********0
发帖数: 2717
13
沙盘mm是大牛。

【在 i****h 的大作中提到】
: 拜大牛,你的的确清晰多了。
s*******i
发帖数: 712
14
是啊。。。我也发现了

【在 m********0 的大作中提到】
: 沙盘mm是大牛。
1 (共1页)
进入JobHunting版参与讨论
相关主题
说说我被面试到的c++题目吧问个C++重新编译的问题
BB phone interview questionC++面试问题,高人请进啊~~~
发发面经 攒人品 C++的请教1个工作面试题
bloomberg非典型面试为什么C++的constructor出错可以抛出异常,而destructor出错
C++ online Test 一题One C++ question
一个Naive的问题,tree的destruction面经: bloomberg 电面
leetcode上这个链表节点的定义是什么意思?ListNode(int x) : val(x), next(NULL) {}C++ Q65: recompiling (IB)
新Qualcomm面经C++相关的面经
相关话题的讨论汇总
话题: base话题: derived话题: destructor话题: var1