// ( o16.C ) // オブジェクト保持の内部オブジェクトを取り出す // #include class Vertex { int x ; public: Vertex( int i ) { x = i ; } ~Vertex() { cout << "delete Vertex\n" ; } void show() { cout << "Vertex desu\n" ; } } ; class Line { Vertex *v ; public: Line( int i ) { v = new Vertex( i ) ; } ~Line() { // delete v ; ここで消去をしないようした。 cout << "delete Line\n" ; } void show() { cout << "Line desu\n" ; } Vertex* get_v() { return v ; } } ; main() { Line* l = new Line( 10 ) ; Vertex* p = l->get_v() ; // Line を消去する前に Vertex のポインタ p->show() ; // を取り出しておく delete l ; // Line を消去してしまう p->show() ; // Vertex は消去されていないことに注意! delete p ; // 改めて消去する } /* [結果] Vertex desu delete Line Vertex desu delete Vertex */