&  -  an address operator.

*  -  a pointer declaration or a dereference operator

#include<iostream>
using namespace std;

int main()
{
	int a;
	int *aPtr;

	a=7;
	aPtr = &a;

	cout<<"The address of a is " << &a<<endl;
	cout<<"The value of aPtr is "<<aPtr<<endl<<endl;
	cout<<"The value of a is "<<a<<endl;
	cout<<"The value of *aPtr is "<<*aPtr<<endl<<endl;
	cout<<"Showing that * and & are inverses of each other."<<endl<<endl;
	cout<<"*&aPtr = "<< *&aPtr <<endl;
	cout<<"&*aPtr = "<<&*aPtr<<endl;
	system("pause");
	return 0;
}


new operator 
combination of dereference and dot operators  ->
#include<iostream>
#include<string>
using namespace std;

class DS
{
public:
	string name;
	int score;
};

int main()
{
	DS *objPtr;
	objPtr = new DS;  //dynamically allocate memory

	(*objPtr).name = "XXXX";  //dereference and dot operator
	objPtr ->score = 85;      // short cut of "(* ). "
	cout<<"The name is " << objPtr->name << endl;
	
	delete objPtr;  //release the memory of object. 
	system("pause");
	return 0;

}

Arrays are useful for data storage, when you know an exact size for the memory allocation for the array.
However, if the size is not set, an array may waste space or it may run out of space.  Therefore, we use

new
delete
to allocate and deallocate memory spaces as we need it when we need it.

The new operator:  obtain memory from the free storage.
                                It returns an address of variable stored.
                                Return 0(NULL) if there is no enough space.

Note:     new is followed by the type of the address.
             The new operator automatically creates an object of proper size,
             and remains a pointer of the connect type.
--------------------------------------------------------------------------------
On page 229 of Data Structures with C++ using STL, second edition, by William Ford & William Topp:

You can think of the heap as a bank of memory, much like a financial
bank that maintains a reserve of money.  A program can borrow
(allocate) memory from the heap when additional storage space is required
and then pay it back (deallocate) when it is no longer needed.
--------------------------------------------------------------------------------

The pointer this
Each C++ object has a pointer named this, which is automatically defined when the object is created.
It can be used only inside a class member function.
It is a pointer to the current object.
 

*this
 the object itself  
this->member1
the data value of member1 (*this).member1
this->member2
the pointer of member2 (*this).member2