Создание и удаление массива виртуальных объектов
От: Михаил Лёсин Россия  
Дата: 29.07.10 13:18
Оценка:
Никак не могу понять, что в этом коде сделано неверно:
#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


Что я делаю не так?
WBW, Mike.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.