在不创建任何类型对象的情况下声明向量和指针

时间:2017-04-20 05:28:24

标签: c++ arrays c++11 pointers vector

给出c ++类Student和声明:

  1. 一个数组,可以容纳10个Student类型的对象:Student a[10];
  2. 一个可以容纳10个Student类型对象的数组: Student *a[10];
  3. 一个STL向量c,可以容纳10个Student类型的对象: vector<Student> c;
  4. 一个STL向量,可以容纳10个类型的对象 Studentvector<Student*> d
  5. 可以在不创建任何学生对象的情况下声明4个(可以多个)中的哪一个?

    我最初的想法是所有这些(a,b,c,d),但我被告知只有指针(b和d)才可以在不创建对象的情况下声明。我希望对此有所澄清。感谢。

2 个答案:

答案 0 :(得分:5)

2,3,4。 (1)已经有10名学生申报。 (2)指针数组是如此,在Student对象中不需要只需要学生令牌的声明(你可以只有&#34;类学生&#34;空声明它可以工作)。 (3)直到你没有把东西放在std中,向量是空的。但在这种情况下,您需要在范围内定义Student(例如&#34; class Student {};&#34;),因此限制比2更严格。 (4)与2相同。

答案 1 :(得分:2)

在2,4中,您使用的类型是Student *,它只是一个指向0xff0f0f地址的数字。在这种情况下,不会创建对象,因为您正在创建地址,它可以指向任何内容,甚至什么都不指向。因此,您必须稍后将它们指向实际对象。将它们视为定义类似int address_array[10]

的内容

此外,1与3不同。当您创建类似Student a[10]的数组时,您在内存中创建10个Student对象,并为每个对象调用默认构造函数。 3,当你定义vector<Student> a时,实际上没有任何事情发生,直到你真正调用类似a.push_back(some_student)的东西。