转载自:https://www.cnblogs.com/laogaoyang/p/5757453.html
有些细节稍作补充:
class Test { public: Test() {} Test(int a) {} }1、栈上创建对象 1.1 无括号 Test a; // 调用默认构造函数,栈上分配内存创建对象1.2 有括号 Test a(); // 无任何意义,声明一个返回值为Test对象的无参函数1.3 有括号+参数 Test a(2); // 调用构造函数Test(int a),栈上分配内存创建对象 2、堆上创建对象 2.1 无括号 Test *a = new Test; // 调用默认构造函数(若由编译器生成则成员不初始化),堆上分配内存创建对象2.2 有括号 Test *a = new Test(); // 调用默认构造函数(若由编译器生成则成员初始化),堆上分配内存创建对象2.3 有括号+参数 Test *a = new Test(2); // 调用构造函数Test(int a),堆上分配内存创建对象2.4 系统内置类型 new int;// 分配内存,未初始化 new int();// 分配内存,初始化为0 new int(2);// 分配内存,初始化为2 new int{10};//c++11允许基本类型使用花括号对其进行初始化操作。
在孤独中思考,在思考中成熟,在成熟中升华