More C++ Classes: Copy and Move Semantics: Listing 1

Overriding copy semantics to implement deep tree copies.

// copy constructor.
tree::tree(const tree<T>& other) : tree{}
{
  // if the other tree isn't empty, it's copied from its root.
  if (!other.is_empty()) root_.reset(new node{*(other.root_)});
}

// copy assignment.
tree::tree& operator=(const tree<T>& other)
{
  if (this == &other) return *this; // handle self-assignment

  // if the left-side tree isn't empty, it's cleared. Existing nodes are deleted.
  if (!is_empty())
  {
    root_.reset(nullptr);
  }

  // if the other tree isn't empty, it's copied from its root.
  if (!other.is_empty()) root_.reset(new node{*(other.root_)});

  return *this;
}

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

Featured

  • VS Code 1.127 Further Integrates Advanced Browser-AI Tech

    Microsoft's July 1 Visual Studio Code update continues a recent push to make the editor's integrated browser a more capable development surface -- and a more useful tool for AI agents.

  • Support Vector Regression with SGD Training Using C#

    Support vector regression can predict numeric values effectively, and this article shows how to implement and train a kernel SVR model in C# using stochastic sub-gradient descent.

  • New GitHub Switch Limits Repo Issue Creation to Collaborators Only

    After publicly touting pull request limits as a way to cut maintainer noise, GitHub is taking the same idea further with a new setting that lets repository admins restrict issue creation to collaborators only.

  • Uno Platform Helps Ship First Stable SkiaSharp 4.0 Release for 2D .NET Graphics

    SkiaSharp 4.148.0 is the first stable v4 release, bringing a newer Skia engine, API cleanup, performance work and a Microsoft-Uno co-maintenance model.

Subscribe on YouTube