【问题标题】:How to set a vector of pointers = to nullptr in c++?如何在 C++ 中设置指针向量 = 到 nullptr?
【发布时间】:2022-01-11 18:04:41
【问题描述】:

我有以下代码

std::vector<std::unique_ptr<Account>> openedAccounts;

(帐户是一个类),所以我有一个指针向量,我知道制作指针时的最佳做法是用某些东西初始化它或确保将其分配给 nullptr,但是当我这样做时 std::vector&lt;std::unique_ptr&lt;Account&gt;&gt; openedAccounts = nullptr; 或 @987654323 @它不起作用,那么我如何将openedAccounts设置为nullptr

【问题讨论】:

  • 请注意,初始化指向 nullptr only 的指针的建议适用于原始指针。所有定义明确的智能指针(其中unique_ptr 是其中之一)在构造时将默认为它们等效的nullptr,因此您无需担心。这适用于独立的unique_ptrstd::vector 中的一个。另外,std::vector 在创建时保证为空(除非您专门使用将填充它的非默认构造函数之一,但您必须故意这样做)。
  • 向量不是可以为空的类型。最接近的是空向量,这是默认构造的向量。
  • 一个vector指针是一个vector,而不是一个pointer

标签: c++ oop pointers inheritance smart-pointers


【解决方案1】:

默认构造的std::vector 是空的,所以你很清楚。

同样,默认构造的 std::unique_ptr 为空,因此调整矢量大小也可以开箱即用。

【讨论】:

  • 谢谢,所以我目前拥有它的方式很好/符合最佳实践?谢谢
【解决方案2】:

向量不是指针,也不是模拟指针的类,即它不是智能指针,也不是花哨的指针。您不能将nullptr 分配给向量,也不能将nullptr 分配给它。没有空向量之类的东西。

如果您想将向量初始化为空,您可以像在示例中那样使用默认初始化(值初始化也可以)。无需进一步的步骤。

【讨论】:

  • 谢谢,所以我目前拥有它的方式很好/符合最佳实践?谢谢
  • @mathewsjoyy 最好的做法可能是使用std::vector&lt;Account&gt;,除非您有特殊理由不这样做。
  • @eeroika 所以我将在银行应用程序中使用它并让用户打开不同的账户,所以我需要一个指针向量,而不仅仅是一个普通的账户向量,以便能够分配内存按需,因为我不知道用户最终会创建多少个帐户。这是一个很好的用例吗?
  • @mathewsjoyy 如果“不同的帐户”是指不同类型的帐户,那么可以。面向对象的多态性是合理的用例。
  • 是的帐户是我的基础,我有继承的活期和储蓄,谢谢
猜你喜欢
  • 2020-08-04
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多