Никак не могу понять, что в этом коде сделано неверно:
#include <iostream>
#include <string>
using std::string;
using std::cout;
using std::endl;
class A
{
string name;
public:
A(const char *title):
name(title)
{
cout<<"A::A for '"<<name<<"'"<<endl;
}
~A()
{
cout<<"A::~A for '"<<name<<"'"<<endl;
}
};
class B
{
A ba;
public:
B():ba("b::a"){}
virtual ~B(){}
virtual void f(){}
};
class C : public B
{
A ca;
public:
C():ca("c::a"){}
};
int main()
{
B *ptr = new C[5];
delete[] ptr;
return 0;
}
На винде в MSVC вроде работает, а в GCC на линуксе и маке вижу следующее поведение:
A::A for 'b::a'
A::A for 'c::a'
A::A for 'b::a'
A::A for 'c::a'
A::A for 'b::a'
A::A for 'c::a'
A::A for 'b::a'
A::A for 'c::a'
A::A for 'b::a'
A::A for 'c::a'
Segmentation fault
Что я делаю не так?