Question: Code:

```
int x = 2;
int* pointerone = &x;
int* pointertwo = pointerone;

```

So the address of `pointerone` is assigned to `pointertwo`, but is the copy constructor being called and the object that holds the address is copied into the address object of the other pointer, like all the default copy constructors on other types performing a shallow copy. If it is as I expect, how does the copy constructor of a pointer look like?

Answer: 
There are no constructors involved here. In fact this code is pure C code.

```
int x = 2;

// pointerone points to the memory address of x
int* pointerone = &x;

// pointertwo points to the same address than pointerone,
// therefore it points also to the memory address of x
int* pointertwo = pointerone;

```

That's all.

And even in C++, pointers don't have constructors, exactly as the `int` type doesn't have a constructor.
When you initialize a pointer with the value of another pointer you are just making another variable for the same memory address, as @Michael just said.

But be careful doing this. If you delete one of the pointer and you dereference the other one in another point of the program, it will raise an exception, and if not handled properly will crash your program.

Take this as an example:

```
int *ptr1 { new int(15) };
int *ptr2 { ptr1 }; // ptr2 points to same memory address as ptr1

// ... Some cool code goes here

delete ptr1; // Free the memory of ptr1

cout << *ptr2;
// Raises an exception because the address
// has been removed from the effective
// memory of the program.

```