【问题标题】:What are elements in a vector of object pointers initialized to?初始化为对象指针向量中的元素是什么?
【发布时间】:2014-11-29 19:39:41
【问题描述】:

假设我的对象叫做 THING,它有一个指向另一个 THING 的指针。我希望能够将对象中的 THING 指针指向指向 THINGS 的指针向量中的任何元素,但我不希望它指向一些垃圾值,所以我想知道这些元素是否被初始化为 NULL ,这将适用于我如何构建一个包含这些对象和对象指针向量的类。

简单地说,有谁知道指针向量中的元素被初始化为什么?

编辑:澄清一下,我在 .

中使用标准矢量类

【问题讨论】:

  • THING 负责初始化它自己的成员函数。初始化ctor初始化器列表中的成员变量。
  • 是的,THING 正在初始化它自己的成员,但我最初并没有在向量中放入任何东西,而是指向向量中的元素,所以我只是确保我没有当我宁愿指向 NULL 时指向垃圾。

标签: c++ pointers vector


【解决方案1】:

当一个向量被创建时,它里面的所有元素都是值初始化的。因此,如果您有一个指针向量,除非您更改值,否则它们都将指向 NULL。

【讨论】:

  • @Daniel T. 不不不,默认初始化(与值初始化相反)不会将指针初始化为 NULL。 stackoverflow.com/questions/1910832/… 只有当 OP 使用 std::vector 时,您的答案才是正确的,它会对其元素进行值初始化。
  • 我正在使用 中的矢量类。如果vector持有指针,标准类会将元素初始化为NULL?
  • @morr36,是的,正如我在回答中提到的那样。请在您的问题中澄清这一点,因为它是现在写的,不清楚您使用的是std::vector
  • @vsoftco Foo cvfoo[10]; 不是向量,而是数组。
  • @DanielT。从技术上讲是的,但是(您可能会同意),大多数人可以互换使用它。无论如何,我 -1 你的帖子,因为你说元素是“默认初始化的”。这不是真的,std::vector 会进行值初始化,这正是人们想要的。
【解决方案2】:

如果您有一个普通的旧 C 样式数组,例如 Foo vfoo[10];,则指针不会初始化为 nullptr(即未初始化值),而是默认初始化。仅当您声明了 std::vector 时,例如如std::vector<Foo> vfoo(10);,那么它的元素将被值初始化,你的指针将是nullptr

std::vector<>的构造函数:

explicit vector (size_type n, const T& value= T(), const Allocator& = Allocator()); 

这里const T& value= T() 进行值初始化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    相关资源
    最近更新 更多