假定CSomething是一个类,执行下面这些语句之后,内存里创建了____个CSomething对象。

 

2 1 收藏


直接登录
最新评论
  • 赖信涛 自然语言处理/Python 2015/09/21

    CSomething a(); 创建a
    CSomething b(2); 创建b
    CSomething c[3]; 创建 c0 1 2
    CSomething &ra = b; 引用指向b的地址,不创建
    CSomething d=b; 等号是浅拷贝,不调用构造函数,不创建
    CSomething pA = c; 将数组的首地址赋值给pA,不创建
    CSomething p = new CSomething(4) new调用构造函数

    你可以自己写一写,构造函数输出语句,就看到什么时候创建了对象了。

    • 王先生 学生 2015/09/21

      CSomething d=b; 创建一个新对象这句话不调用拷贝构造函数么

      • 王先生 学生 2015/09/21

        哦 我懂了 b还没被初始化 所以是浅拷贝 对么

        • 赖信涛 自然语言处理/Python 2015/09/21

          不对,我查了C++Primer,如果类没有定义自己的拷贝赋值运算符,编译器会生成一个。

          但是返回值会返回一个指向左侧运算对象的引用。

          我还怀疑过数组只产生一个对象,但是去查了一下, 数组有多大就会调用多少次构造函数。

          如果赋值运算符没有被重载的话,我的答案也是7个。

  • 小板凳路边看美女 学僧 2015/09/21

    1、2、7真正创建对象了,3、4、6是指针,5和2指向同一个对象

  • 7个。1,2肯定创建了,2个;3是对象数组,3个;4是引用;5相当于CSomething d(b),1个。根据变量命名猜测最后两个都是CSomething*。6是指向c的指针;7new分配空间,调用构造函数,返回指针,1个。

  • 恩祭   2015/09/22

    1.函数声明,0个
    2.构造函数C(int),1个
    3.3次调用默认构造函数,数组要占内存,不构造怎么占内存?3个
    4.引用,绑定到对象,一个名字,0个
    5.拷贝构造函数,赋值操作符要在对象已存在才会调用,拷贝参数为const C&,引用传参,不会生成临时对象,1个
    6.指针,0个,但是没有*语法错误
    7.4是参数,不是4个对象,大哥,,,1个,但是没有*,语法错误。

    综上,调试成功后有6个对象,就上面代码而言,由于编译不通过,0个对象。

    • SteelDoor   2015/09/22

      6 7两条,不要以为名字叫p就是指针……
      完全可以是有一个CSomething(CSomething *)的构造函数
      所以如果没抄错题那应该是8个

      • SteelDoor   2015/09/22

        哦,7应该有两个,new出来一个,再创建一个,9个……

        • 恩祭   2015/09/22

          soga,学习了,但是不应该是8个吗?

          • SteelDoor   2015/09/23

            CSomething pA = c;
            调用CSomething(CSomething *)生成一个pA
            CSomething p = new CSomething(4)
            先new一个CSomething(4),然后用CSomething(CSomething *)再构建一个p,所以这一行有两个新对象

            • 恩祭   2015/09/24

              0+1+3+0+1+1+2 = 4+4=8,没看出来第九个在哪,估计我小学数学是体育老师教的,没数明白

              • 王先生 学生 2015/09/27

                六个啊 上面的解答比价完善 可以看一看啊

                • 恩祭   2015/09/29

                  上面是我自己的回复,如果代码有问题,是伪码,就是6个,如果确定是可以编译通过的代码,就是8个。
                  引用2楼:
                  6 7两条,不要以为名字叫p就是指针……
                  完全可以是有一个CSomething(CSomething *)的构造函数
                  所以如果没抄错题那应该是8个

  • 恩祭   2015/09/22

    写第一条代码的人,跪求公司把他辞退!
    作为对象创建,神经病一样去使用调用操作符。
    作为函数声明,书上说的明明白白,没有参数的声明最好要加C test(void),明知有歧义还不去加void区分。
    如果看不出来有歧义,说明业余不熟,建议降薪惩罚。

  • 穷小子 反正不是IT 2015/09/22

    6个,当然是一一个,二一个,三三个最后一个,其他要么指针,要么引用,要么把数组那个的首地址复制给pA(这是什么鬼,CSomething和CSomething *不能直接赋值吧。。。编译能过?)是六个吗?求题主给答案。。。

    • 穷小子 反正不是IT 2015/09/22

      错了。。。没看清楚。。。第一个明显是声明函数。。。第五个才是构造了一个新的然后复制过去,调用了默认或者定义的拷贝构造函数。

  • z. 学生 2015/09/22

    CSomething a(); 函数声明,0个
    CSomething b(2); 1个
    CSomething c[3]; 数组,3个
    CSomething &ra = b; 引用,0个
    CSomething d=b; 等价于 CSomething d(b);调用拷贝构造函数,1个
    CSomething pA = c; 应该是“CSomething *pA = c;”否则编译不通过,改正后是指针,没有申请新空间,0个
    CSomething p = new CSomething(4) 同上,应为CSomething *p = new CSomething(4); ,改正后申请了一个新空间,1个

    总共6个

    ////////测试如下
    class CSomething{
    public:
    static int count;
    CSomething(){
    count++;
    }
    CSomething(int x){
    count++;
    }
    CSomething(CSomething &x){
    count++;
    }
    ~CSomething(){
    count–;
    }
    };

  • 张书艾 游戏服务器程序 2015/09/23

    由于语法错 编译不过

  • fd5788 程序猿 2015/09/25

    第一个是声明一个函数而不是创建对象,调用默认构造函数肯定会创建对象的。

  • c++ 语法中, CSomething p = new CSomething(4) ;这样写对么?

  • 冯攀 程序猿 2015/09/29

    CSomething a(); //创建1个 存在不带参数的构造函数
    CSomething b(2);//创建1个 存在带参数的构造函数
    CSomething c[3];//创建3个
    CSomething &ra = b; //没有创建
    CSomething d=b;//创建1个 存在operator=重载
    CSomething* pA = c;//这里是不是少了一个*
    CSomething p = new CSomething(4)//创建一个初始化参数为4
    总共创建7个=1+1+3+1+1