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) {
/* ---------------------------------- */
// 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");
    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) {

About the Author

Diego Dagum is a software architect and developer with more than 20 years of experience. He can be reached at [email protected]

comments powered by Disqus


  • VS Code Update Adds Python Tutorials

    The Visual Studio Code dev team added new Python tutorials as part of the regular monthly update, this one for March 2020, bringing the open-source, cross-platform code editor to version 1.44.

  • Top 3 Blazor Extensions for Visual Studio Code

    Some developers prefer to create applications with Microsoft's open-source Blazor tooling from within the open-source, cross-platform Visual Studio Code editor. Here are the top tools in the VS Code Marketplace for those folk, as measured by the number of installations.

  • How to Invert a Machine Learning Matrix Using C#

    VSM Senior Technical Editor Dr. James McCaffrey, of Microsoft Research, explains why inverting a matrix -- one of the more common tasks in data science and machine learning -- is difficult and presents code that you can use as-is, or as a starting point for custom matrix inversion scenarios.

  • Microsoft Engineer: 'It's Time to Move OData to .NET 5'

    Microsoft engineer Sam Xu says "it’s time to move OData to .NET 5" and in a new blog post he shows how to do just that.

  • Microsoft Goes Virtual with Developer Education in Face of COVID-19

    Like many organizations that host developer educational events, Microsoft has gone virtual amid shelter-in-place directives and a surge in remote work stemming from the COVID-19 pandemic.

.NET Insight

Sign up for our newsletter.

Terms and Privacy Policy consent

I agree to this site's Privacy Policy.

Upcoming Events