【问题标题】:How to resize a std::vector based upon one of subclasses? [duplicate]如何根据子类之一调整 std::vector 的大小? [复制]
【发布时间】:2013-12-30 15:35:30
【问题描述】:

我有这些课程:

  • 一个基地class
  • 一个 Child class 需要比 Base 更多的空间。

类似这样的:

class Base{
};


class Child : Base{
   int something;
};

我定义了一个包含基类实例的std::vector

例如:我想为每个 Child 对象保留空间而不是使用 push_back()。是否有任何解决方案可以在 Child 类上调整向量的大小?

【问题讨论】:

  • 你不能这样做!使用指针(最好是智能指针)在你的向量中存储对这些对象的引用。
  • 问题是我想在 C++03 中从用户那里得到一个向量。向量可以包含许多对象。此后我需要效率、多态性和向量。这似乎是完全错误的想法

标签: c++ vector


【解决方案1】:

它要么是Base 的向量,要么是Child 的向量。不可能两者兼而有之。如果您声明一个std::vector<Base> 并尝试将Childs 放入其中,您将对它们进行切片,并且只得到Base 部分Childs。

如果你想要多态,你必须有一个Base* 的向量。那么向量的每个元素使用的空间就是指针的大小——该指针可以指向BaseChild

【讨论】:

  • C++03 中的任何想法而不是指针?我想在代码中处理对象删除。
  • @Saeed 多态性适用于指针或引用,因此您必须使用其中之一。您可以使用 boost::reference_wrapper 或 Boost 中的智能指针。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
  • 2020-10-11
  • 2019-09-29
  • 2016-10-17
相关资源
最近更新 更多