1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
#include <iostream>

class Chain {
   public:
      Chain(const char* name, Chain* next) : name(name), next(next) {
	 std::cout << "Chain \"" << name << "\" constructed" << std::endl;
      }
      ~Chain() {
	 delete next;
	 std::cout << "Chain \"" << name << "\" destructed" << std::endl;
      }
   private:
      const char* name;
      Chain* next;
};

int main() {
   Chain* c1p = new Chain("chain member #1", nullptr);
   Chain* c2p = new Chain("chain member #2", c1p);
   Chain* c3p = new Chain("chain member #3", c2p);
   delete c3p;
}