新(尺寸)和新尺寸之间的差异[尺寸]

时间:2014-02-22 19:39:30

标签: c++ new-operator

这是为对象创建大小(1,len)的向量的代码:

#include<iostream.h>

class vector
{
    int *vect;
    int len;
    public:
    vector(){ vect=NULL; len=0; }
    void get_data();
    void display();
};

void vector::get_data()
{
      cout<<"Enter number of elements: ";
      cin>>len;
      int *f=new int(len);
      vect=f;
      cout<<"Enter "<<len<<" values: ";
      for(int i=0;i<len;i++) cin>>*(vect+i);
}

void vector::display()
{
      for(int i=0;i<len;i++) cout<<*(vect+i)<<"    ";
      cout<<endl;
}

void main()
{
    vector v1,v2;
    v1.get_data();
    v1.display();
    v2.get_data();
    v2.display();
    v1.display();
}

输出:

Enter number of elements: 5
Enter 5 values: 1 2 3 4 5
1    2    3    4    5
Enter number of elements: 5
Enter 5 values: 6 7 8 9 9
6    7    8    9    9
9    2    3    4    5

为什么矢量对象v1的第一个值在创建对象v2时会发生变化?

当我更换线路时: get_data()中的int *f=new int(len);int *f=new int[len];我得到了预期的结果:

Enter number of elements: 5
Enter 5 values: 1 2 3 4 5
1    2    3    4    5
Enter number of elements: 5
Enter 5 values: 6 7 8 9 9
6    7    8    9    9
1    2    3    4    5

2 个答案:

答案 0 :(得分:11)

new int(len)创建一个整数,并使用值len对其进行初始化。

new int[len]创建一个未初始化的len整数数组。

答案 1 :(得分:9)

new int(len)分配一个int对象,并使用值len对其进行初始化。另一方面,new int[len]分配长度为int的{​​{1}}数组。

lenint x(5);进行比较。

当您只分配一个int x[5];时,int试图写入尚未分配的对象。