由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - one C++ question?
相关主题
谁给个c++虚函数完全总结啊(C / C++) 关于指针的引用,求助
请问这是什么level的面试题Bloomberg的在线C测试是不是比C++容易些?
发面经攒RP一个C++问题
谁对design pattern比较熟?bloomberg 电面
My Microsoft Phone InterviewG 家电面的时候大家都是用什么语言?
问道编程题C++ Q79: What is the size of a pointer? and why?
在线等两个问题M的onsite是不是一定会考c的题目?
怎么才能掌握好C++里面的指针和引用?面试面试官错了怎么办?
相关话题的讨论汇总
话题: virtual话题: base话题: destructor话题: c++话题: class
进入JobHunting版参与讨论
1 (共1页)
P*******b
发帖数: 1001
1
if a base does NOT have any virtual function, do we need the destructor be v
irtual?
why?
e*****m
发帖数: 320
2
virtual destructor的作用是动态释放类实例化过程中可能产生的资源分配问题,这个
跟有没有虚函数应该没有因果关系,只跟类内部的资源分配有关系
所以答案是yes,it is always right to declare a destructor virtual.
我可以给你举个例子,等会我把代码和分析贴上来
p**********s
发帖数: 115
3
NODNOD~

【在 e*****m 的大作中提到】
: virtual destructor的作用是动态释放类实例化过程中可能产生的资源分配问题,这个
: 跟有没有虚函数应该没有因果关系,只跟类内部的资源分配有关系
: 所以答案是yes,it is always right to declare a destructor virtual.
: 我可以给你举个例子,等会我把代码和分析贴上来

f**********w
发帖数: 93
4
如果没有其他的virtual method,没有必要声明destructor virtual。因为这样会增加
额外的object空间开销,多了一个指向vtable的指针。
f****4
发帖数: 1359
5
应该这么问:
没有别的 virtual method,同时没有用new动态分配过资源,还有必要把destructor定
义成virtual么?
P*******b
发帖数: 1001
6
如果有人继承了这个类并不巧在不知道的情况下用了类似dynamic binding的用法呢?

【在 f**********w 的大作中提到】
: 如果没有其他的virtual method,没有必要声明destructor virtual。因为这样会增加
: 额外的object空间开销,多了一个指向vtable的指针。

m****w
发帖数: 372
7
这个virtrual destructor 的定义与否,depending on if this class is designed
to be a BASE class, not depending on if class contains virtual function.
(BASE class may or may not contain virtual function)
(from another point of view, if a class contains virtual function, then it
is designed as a base class, it needs VDes.)
eff. c++ Item7的第二部分,Meyers 从编译器优化的角度说明, if one class is
not designed as BASE class, it should not have Vdes.
M********5
发帖数: 715
8

你说的很正确,所以先前那个人说没有virtual function就不要定义virtual
destructor的说法
是不正确的

【在 P*******b 的大作中提到】
: 如果有人继承了这个类并不巧在不知道的情况下用了类似dynamic binding的用法呢?
M********5
发帖数: 715
9

前面说要举的例子就是这样子的:
Base中有分配内存,Derived也有分配内存,如果我们有一个指针指向动态分配的
Derived,然后再
把这个指针赋值给指向Base的指针,然后delete指向Base的指针,就会出现内存泄露!
Base *pb;
Derived *pd = new Derived;
pb = pd;
delete pb; //这里就会出现内存泄露的问题
我想我这样解释不知道大家是否明白

【在 P*******b 的大作中提到】
: 如果有人继承了这个类并不巧在不知道的情况下用了类似dynamic binding的用法呢?
f*********5
发帖数: 576
10
你的意思说为了避免个别人的错误让所有使用者都降低效率?

【在 P*******b 的大作中提到】
: 如果有人继承了这个类并不巧在不知道的情况下用了类似dynamic binding的用法呢?
M********5
发帖数: 715
11

他应该不是这个意思,而是说,基类函数的destructor一般都定义为virtual
另外加我自己的一个观点,如果说有可能有client用错,那我觉得宁愿牺牲存储空间,
也要保证正确
率。因为发生内存泄露其实是一件很危险的事情

【在 f*********5 的大作中提到】
: 你的意思说为了避免个别人的错误让所有使用者都降低效率?
a****n
发帖数: 1887
12
父类的析构函数为共有虚函数, 或者保护非虚函数
f**********w
发帖数: 93
13
如果基类没有任何virtualmethod, 为什么要做指针的转换呢?这种情况不存在任何的
多态,在我看来,错误应该是指针转换本身,而不是有或没有virtual destructor。举
个例子
如果我们在derived class 里定义了一个新的method,如果我们把指针转换成基类指针
,然后用基类指针调用derived class method,一样会导致错误。The responsibility
is on the client side to make sure they do not do downcast if base class
does not contain any virtual method.

【在 M********5 的大作中提到】
:
: 他应该不是这个意思,而是说,基类函数的destructor一般都定义为virtual
: 另外加我自己的一个观点,如果说有可能有client用错,那我觉得宁愿牺牲存储空间,
: 也要保证正确
: 率。因为发生内存泄露其实是一件很危险的事情

1 (共1页)
进入JobHunting版参与讨论
相关主题
面试面试官错了怎么办?My Microsoft Phone Interview
用Java面试的大牛们问道编程题
二维数组问题在线等两个问题
问个c++的问题怎么才能掌握好C++里面的指针和引用?
谁给个c++虚函数完全总结啊(C / C++) 关于指针的引用,求助
请问这是什么level的面试题Bloomberg的在线C测试是不是比C++容易些?
发面经攒RP一个C++问题
谁对design pattern比较熟?bloomberg 电面
相关话题的讨论汇总
话题: virtual话题: base话题: destructor话题: c++话题: class