首页 > 试题广场 >

内存里创建了多少个CSomething对象

[单选题]
假定CSomething是一个类,执行下面这些语句之后,内存里创建了____个CSomething对象。
CSomething a();
CSomething b(2);
CSomething c[3];
CSomething &ra = b;
CSomething d = b;
CSomething *pA = c;
CSomething *p = new CSomething(4);
  • 10
  • 9
  • 8
  • 7
  • 6
  • 5
推荐
xpj头像 xpj
//个人觉得应该是6个。
CSomething a();// 没有创建对象,这里不是使用默认构造函数,而是定义了一个函数,在C++ Primer393页中有说明。
CSomething b(2);//使用一个参数的构造函数,创建了一个对象。
CSomething c[3];//使用无参构造函数,创建了3个对象。
CSomething &ra=b;//ra引用b,没有创建新对象。
CSomething d=b;//使用拷贝构造函数,创建了一个新的对象d。
CSomething *pA = c;//创建指针,指向对象c,没有构造新对象。
CSomething *p = new CSomething(4);//新建一个对象。
//综上,一共创建了6个对象。个人理解,如有错误,还请大神指出。

编辑于 2015-08-24 10:40:32 回复(18)
啥头像
答案应该为E  6个
在编译器上测试过

CSomething a();                                            只是个函数声明
CSomething b(2);                                            +1
CSomething c[3];                                            +3,对象数组
CSomething &ra = b;                                       引用,没有新构造
CSomething d=b;                                            +1,调用拷贝构造函数
CSomething *pA = c;                                        只是给指针赋值
CSomething *p = new CSomething(4);            +1,构造并给指针赋值
总共6个

发表于 2015-08-24 10:12:30 回复(10)
CSomething a();// 定义一个函数,参数为空,返回值为CSomething对象, 类似int func();   
CSomething a; // 定义对象a,使用默认构造函数CSomething::CSomething() 
CSomething a(0); // 定义对象a,使用构造函数CSomething::CSomething(int)

编辑于 2016-01-12 10:04:14 回复(0)
注意区别:
CSomething a();
CSomething a;
前者是一个函数的声明,与默认构造函数区分;//返回类型为CSomething,形参表为空
后者是一个对象的定义;
发表于 2017-02-19 15:28:42 回复(0)
//个人觉得应该是6个。
CSomething a();//   没有创建对象,这里不是使用默认构造函数,而是定义了一个函数,在C++ Primer393页中有说明。
CSomething b(2);//使用一个参数的构造函数,创建了一个对象。
CSomething c[3];//使用无参构造函数,创建了3个对象。
CSomething &ra=b;//ra引用b,没有创建新对象。
CSomething d=b;//使用拷贝构造函数,创建了一个新的对象d。
CSomething *pA = c;//创建指针,指向对象c,没有构造新对象。
CSomething *p = new CSomething(4);//新建一个对象。
//综上,一共创建了6个对象。个人理解,如有错误,还请大神指出。
发表于 2016-03-08 14:11:19 回复(1)
个人觉得是6。下面一个个分析:
    1.函数声明
    2.调用一次带参的构造函数------------------------------------------->1
    3.调用三次默认构造函数---------------------------------------------->4
    4.引用变量定义
    5.复制构造函数调用---------------------------------------------------->5
    6.指针给指针赋值,用不到构造函数(可能就是这有分歧)
    7.动态创建调用带参构造函数----------------------------------------->6

发表于 2015-08-26 10:07:29 回复(0)
10个,C++基础
CSomething a();

CSomething b(2); // +1

CSomething c[3]; // +3

CSomething &ra = b;

CSomething d=b; // +1

CSomething *pA = c;

CSomething *p = new CSomething(4); //+1
编辑于 2015-08-24 10:42:08 回复(6)
第一个是函数声明?
发表于 2021-02-23 20:13:44 回复(0)
最后一个小括号是赋值,中括号是申请四个对象
发表于 2018-07-25 20:39:00 回复(0)
掉坑里了,CSomething a();这个语句是声明一个函数a,其返回值是 CSomething。
发表于 2015-09-02 16:28:27 回复(0)

执行这些语句后,内存中创建了 6 个 CSomething 对象。

  1. CSomething a(); 这是一个函数声明,不会创建对象。
  2. CSomething b(2); 创建了一个对象 b。
  3. CSomething c[3]; 创建了一个数组 c,包含 3 个对象。
  4. CSomething &ra = b; 创建了一个引用 ra,指向对象 b,没有创建新的对象。
  5. CSomething d = b; 创建了一个对象 d,使用对象 b 进行初始化。
  6. CSomething *pA = c; 创建了一个指针 pA,指向数组 c 的第一个元素,没有创建新的对象。
  7. CSomething *p = new CSomething(4); 创建了一个对象,并使用动态内存分配方式,将对象的地址赋给指针 p。

因此,总共创建了 6 个 CSomething 对象。

发表于 2023-10-24 20:33:30 回复(0)
CSomething a();
 是函数声明。。。 
单独拎出来就很容易看出来了,和其它对象实例化放一起还真容易搞混。
发表于 2023-08-16 09:16:59 回复(0)
摘抄来源:C++ primer(第5版)中P263
Sales_data obj();//声明,可以正常编译通过:定义了一个函数而非对象
但尝试使用obj时,编译器报错。上面的obj实际的含义时一个不接受任何参数的函数并返回值是Sales_data类型的对象
如果想定义一个使用默认构造函数进行初始化的对象,正确的方法是去掉对象名之后的空的括号对:
Sales_data obj;
发表于 2020-12-23 11:38:00 回复(0)
CSomething a();
编译器认为这是函数声明,不调用构造函数
编辑于 2019-08-17 18:14:46 回复(0)
圆括号里面的参数表示构造所需的参数,属于有参构造,中括号里的属于个数,是无参构造。
发表于 2019-08-13 07:30:46 回复(0)
c++和java最大的区别之一就是默认构造器不能使用第一行的形式调用,这样是声明函数。
发表于 2019-07-03 22:30:37 回复(0)
第一个是函数声明,不是创建类的对象
发表于 2018-09-08 10:56:37 回复(0)
CSomething a();                  只是个函数声明
发表于 2018-03-12 14:30:31 回复(0)
CSomething a();// 没有创建对象,这里不是使用默认构造函数,而是定义了一个函数,在C++ Primer393页中有说明。 返回类型为csomething 函数名称为a的一个函数声明 CSomething b(2);//使用一个参数的构造函数,创建了一个对象。 CSomething c[3];//使用无参构造函数,创建了3个对象。 CSomething &ra=b;//ra引用b,没有创建新对象。 CSomething d=b;//使用拷贝构造函数,创建了一个新的对象d。 CSomething *pA = c;//创建指针,指向对象c,没有构造新对象。 CSomething *p = new CSomething(4);//新建一个对象。 //综上,一共创建了6个对象。
发表于 2018-03-06 18:23:33 回复(0)
CSomething a();                                            只是个函数声明
这里是个陷阱
发表于 2017-12-26 13:18:12 回复(0)
与之前做过的题一样
CSomething a();    //是函数声明
发表于 2017-11-17 17:39:36 回复(0)