C++的类对象的生成有哪几种方式?有什么区别?该如何解决

C++的类对象的生成有哪几种方式?有什么区别?
例如:对于Class A
  A a;
  A a();//这句编译能过,后面调用会报错,能不能这么用?
  A a=A();
  A* a=new A;
  A* a=new A();
  还有没别的生成对象的方式?他们都有什么区别?
  什么时候要用delete回收?
  小弟最近刚学C++,希望各位大神指教。

------解决方案--------------------
A a();//这句编译能过,后面调用会报错,能不能这么用?
 这个是不行的,一般用类的名称或者类的构造函数!就是你的最后面两个,第一个只是申请一个对象,可以是全局的,也可以是局部的!
------解决方案--------------------
A a();
这个是函数声明。返回值类型为A,函数名为a,无参。