У меня очень странная проблема, с которой я надеюсь, что кто-то сталкивался.
class Letter
{
public:
Letter()
virtual ~Letter()
virtual std::string get() const = 0;
};
class A : public Letter
{
public:
A()
~A()
virtual std::string get() const { return "A"; }
};
class Board
{
public:
Board(){}
~Board()
{
std::cout << "Removing: " << letter->get() << std::endl;
delete letter;
}
void setLetter(Letter * l) { letter = l }
private:
Letter * letter;
}
int main()
{
Board b;
b.setLetter(new A());
}
Программа вызывает ошибку сегмента, когда Board выходит из области видимости в строке, где буква виртуальной функции-> get () вызывается в деструкторе.Я использую gcc 4.1.2.Есть идеи?
ОБНОВЛЕНИЕ
Хорошо, кажется, что то, что на самом деле происходит в реальном коде, эквивалентно этому:
class Board
{
public:
Board(){}
~Board()
{
std::cout << "Removing: " << letter->get() << std::endl;
}
void setLetter(Letter * l) { letter = l; }
private:
Letter* letter;
};
int main()
{
Board b;
A a;
b.setLetter(&a);
return 0;
}
В которомслучай A уже выходит за рамки при вызове виртуальной функции.