>>587
const_castそのものは*b1と*b2のconst性を取り除くものだろうが、
delete時にはconst性を取り除く必要はないので冗長だね。
Xが仮想デストラクタを持っていないのは、すぐにでも問題になりそうだ。

class B{
public:
virtual void f() = 0;
};

class D : public B{
public:
void f() { }
};

class X : public B{
const B *b1, *b2;
public:
X(const B* c1, const B* c2):b1(c1), b2(c2) {}
~X(){
delete const_cast<B*>(b1);
delete const_cast<B*>(b2);
std::cout << "~X()" << std::endl;
}
void f() {}
};