Weak Pointers and Circular References in C++ 11: Listing 1

Spouses referencing each other (in C# and Java).

// C# version
class Person {
  public Person(string name) {
    this.Name = name;
    Console.WriteLine(this.Name + " instance created.");
  }

  ~Person() {
    Console.WriteLine(this.Name + " instance to be disposed.");
  }

  public string Name { get; private set; }

  private Person spouse;

  public Person Spouse {
    get { return spouse; }
    set { this.spouse = value; spouse.spouse = this; }
  }
}

class CircularReference {
  static void GetCoupleMarried() {
    Person husband = new Person("John"), wife = new Person("Pocahontas");
    husband.Spouse = wife;
    Console.WriteLine(husband.Name + "'s wife is " + husband.Spouse.Name + ".");
    Console.WriteLine(wife.Name + "'s husband is " + wife.Spouse.Name + ".");
  }

  static void Main(string[] args) {
    GetCoupleMarried();
    GC.Collect();
  }
}
/* ---------------------------------- */
// Java version
public class Person {
  public Person(String name) {
    this.name = name;
    System.out.println(this.name + " instance created.");
  }
	
  protected void finalize() throws Throwable {
    System.out.println(this.name + " instance to be disposed.");
  }

  // no auto-implemented properties in Java	
  private String name;
	
  public String getName() {
    return name;
  }
	
  private Person spouse;
	
  public Spouse getSpouse() {
    return spouse;
  }

  public void setSpouse(Person spouse) {
    this.spouse = spouse;
    spouse.spouse = this;
  }
}

public class CircularReference {
  static void getCoupleMarried() {
    Person husband = new Person("John"), wife = new Person("Pocahontas");
    husband.setSpouse(wife);
    System.out.println(husband.getName() + "'s wife is " + husband.getSpouse().getName() + ".");
    System.out.println(wife.getName() + "'s husband is " + wife.getSpouse().getName() + ".");
  }
	
  public static void main(String[] args) {
    getCoupleMarried();
    System.gc();
  }
}

About the Author

Diego Dagum is a software architect and developer with more than 20 years of experience. He can be reached at email@diegodagum.com.