Qiniuome a(); Qiniuome b(2); Qiniuome c[3]; Qiniuome &ra = b; Qiniuome *pA = c; Qiniuome *p = new Qiniuome(4);
CSomething a();//只是定义一个方法,方法返回一个CSomething对象 CSomething b(2);//增加1个对象 CSomething c[3];//对象数组,增加3个对象 CSomething &ra=b;//引用不增加对象 CSomething *pA=c;//地址赋值,不增加对象 CSomething *p=new CSomething;//在堆上构造一个对象,增加1个对象 所以最后一共有: 1+3+1 =5个对象。
注:
在C++语言里,
String s2(s1);
String s3 = s1; 只是语法形式的不同,意义是一样的,都是定义加初始化,都调用拷贝构造函数。
下一个并非调用赋值运算符。
CSomething d=b;//调用拷贝构造函数,增加1个对象
Qiniuome a();这里并没有创建Qiniuome对象,而是声明了一个函数a,该函数的返回类型是Qiniuome,参数列表为空。这被称为“most vexing parse”,即“最令人困惑的语法解析”,因为它在某些情况下似乎会被误解为函数声明,而不是对象定义。要创建一个默认构造函数的Qiniuome对象,必须省略括号:Qiniuome a;
Qiniuome b(2);这里创建了一个Qiniuome对象b,调用的是带有一个整数参数的构造函数。
Qiniuome c[3];这里创建了一个Qiniuome数组c,包含3个默认构造函数的Qiniuome对象。
Qiniuome &ra = b;这里创建了一个Qiniuome引用ra,它引用了b所引用的对象。不会创建新的Qiniuome对象。
Qiniuome *pA = c;这里创建了一个Qiniuome指针pA,它指向c数组的第一个元素。不会创建新的Qiniuome对象。
Qiniuome *p = new Qiniuome(4);这里创建了一个Qiniuome对象,通过调用带有一个整数参数的构造函数,并返回其地址。这个对象是通过new运算符在堆上动态分配的,需要手动释放内存。所以,总共创建了5个Qiniuome对象。