Is there pointer in C# like C++? Is it safe?

I'm writing an application that work with a tree data structure. I've written it with C++, now i want to write it by C#. I use pointers for implementing the tree data structure. Is there a pointer in C# too? Is it safe to use it?


If you're implementing a tree structure in C# (or Java, or many other languages) you'd use references instead of pointers. NB. references in C++ are not the same as these references.

The usage is similar to pointers for the most part, but there are advantages like garbage collection.

class TreeNode
{
    private TreeNode parent, firstChild, nextSibling;

    public InsertChild(TreeNode newChild)
    {
        newChild.parent = this;
        newChild.nextSibling = firstChild;
        firstChild = newChild;
    }
}

var root = new TreeNode();
var child1 = new TreeNode();
root.InsertChild(child1);

Points of interest:

  • No need to modify the type with * when declaring the members
  • No need to set them to null in a constructor (they're already null)
  • No special -> operator for member access
  • No need to write a destructor (although look up IDisposable)

YES. There are pointers in C#.

NO. They are NOT safe.

You actually have to use keyword unsafe when you use pointers in C#.

For examples look here and MSDN.

static unsafe void Increment(int* i)
{
    *i++;
}

Increment(&count);

Use this instead and code will be SAFE and CLEAN.

static void Increment(ref int i)
{
    i++;
}

Increment(ref count);