EverNoob 2021-03-23 11:02 采纳率: 75%
浏览 20
已采纳

Cpp : 求解父类指针指代new创建的衍生类的语法细节

如果A 为基类,B为其衍生类,请问以下两句的区别在哪里?

A* a = new B();

A* a = new B;

例子源自https://blog.csdn.net/weixin_33779515/article/details/93275438

class A {
public:
A() { printf("A \n"); }
~A() { printf(" ~A \n"); } // 这里不管写不写virtual,删除B对象的时候,都会被执行。因为这个例子是B*指针指向B对象,不是A*指针指向B对象。
};

class B : public A
{
public:
B() { printf("B \n"); }
~B() { printf("~B \n"); }
};

int main(int argc, char* argv[])
{
B* b = new B;

delete b;
return 0;
}
int main(int argc, char* argv[])
{
B b; // 虽然正确,但其实是非正常情况,因为你防不住程序员定义A* a = new B(); 这样就错了。
return 0;
}
执行结果:
A
B
~B
~A
  • 写回答

1条回答 默认 最新

  • 阿拉灯神ding 2021-03-23 11:53
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?