编译bug??

pcvvv 2016-02-26 05:26:12

class A
{
public:
A()
{
cout << "Constructors default A" << endl;
}
virtual ~A()
{
cout << "Destructors A" << endl;
}
int x;
};
class AA :public A
{
public:
AA()
{
cout << "Constructors default AA" << endl;
}
virtual ~AA()
{
cout << "Destructors AA" << endl;
}
int x;
};
int main()
{
A *p=new AA[2];
p->x=10;
cout<<"x="<<p->x<<endl;
delete []p;
}

clang version 3.4.2 输出为

Constructors default A
Constructors default AA
Constructors default A
Constructors default AA
x=10
Destructors A
Destructors A

没调用AA析构
而g++ 4.8.3 输出为正常的

Constructors default A
Constructors default AA
Constructors default A
Constructors default AA
x=10
Destructors AA
Destructors A
Destructors AA
Destructors A

这是clang++的bug?
...全文
99 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dustpg 2016-02-26
  • 打赏
  • 举报
回复
未定义行为,微软“完美”解决了这个问题, 导致认为其他编译器有bug。不要尝试这个。
  • 打赏
  • 举报
回复
你代码是错误的
A *p=new AA[2];
不能这么干. 只能
AA *p=new AA[2];

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧