涉及类指针的C++面试问题

Vij*_*jay 13 c++

假设有一个基类指针指向一个基类对象:

baseclass *bptr;
bptr= new baseclass;
Run Code Online (Sandbox Code Playgroud)

现在,如果我这样做

bptr= new derived;
Run Code Online (Sandbox Code Playgroud)

这里有什么问题?

小智 17

显而易见的答案是你正在泄漏原始的基类对象.

  • @benjamin按钮:如果基类析构函数不是虚拟的,那么当你`删除bptr;`时,不会调用派生类析构函数.但我不知道这是否相关. (2认同)
  • @Naveen:这是完全错的.如果基类没有未定义行为的虚析构函数,则不会调用某些析构函数. (2认同)

Mot*_*tti 7

除了明显的内存泄漏之外,它还取决于定义baseclassderived一些问题可能是:

  1. derived不是公开的baseclass(如果是这样,在面试中要问一个可怕的问题)
  2. baseclass没有虚拟析构函数(在这种情况下,它是不安全的delete bptr;)


Fan*_*c23 5

如果我是你,我会回头问你的面试官几个问题:

  1. 你确定这是唯一可用的代码片段,在这种情况下,我的答案是一个有根据的猜测,仅此而已.
  2. 是否存在某种基类的内存管理方案并派生出来?在这种情况下,我们需要查看运营商未提供的新定义.
  3. 如果没有内存管理,那么基类或派生智能指针类型是否可以引用计数?在这些情况下也没有泄漏.
  4. 如果没有智能类型,那么当然这看​​起来像是内存泄漏.

并且,只有拥有类定义,才能使用虚拟析构函数等.也许采访者正在秘密寻找透视类型.

Arpan