c++ - 有没有办法使用预先存在的对象作为 C++ 中第一个对象的子对象来创建对象?

标签 c++ class object inheritance nested

因此,假设我们有 Parent 类 和继承自 Parent 类Offspring 类。据我了解,当我创建 Offspring 对象时,也会创建一个 Parent 对象并与 Offspring 对象关联。问题是,如果我已经创建了一个独立的 Parent 对象,我可以将其用作包含在 Offspring 对象中的 Parent 对象吗?它的创建时间?

即是否可以不在 Offspring 对象中创建新的 Parent 对象,而是使用原始(且独立的)对象来代替它?只是将原始 Parent 对象的数据复制到 Offspring 对象中创建的数据显然不是我想要的。

最佳答案

这样做是有可能的。如果 Parent 有移动构造函数,那么您可以编写如下内容:

class Offspring : public Parent {
  double m_x;
 public:
  Offspring(Parent && p, double x)
      : Parent(std::move(p))
      , m_x(x) 
  { }
}

我认为这已经是你在不做一些危险和粗略的事情的情况下所能达到的最接近的结果了。虽然这种技术可能无法避免复制 Parent 的数据,但它的效率要高得多。例如,如果 Parent 是 std::vector,则上面的代码将通过从现有 vector 移动来初始化 Offspring 的基数。这将只需要移动 24 字节的数据,而不是 vector 指向的所有数据。

我想您可能想阅读更多关于移动语义的内容,看看它如何适合您的类。

关于c++ - 有没有办法使用预先存在的对象作为 C++ 中第一个对象的子对象来创建对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30744861/

相关文章:

c++ - OpenCV Mat 在 push_back 时崩溃

c++ - "Right"解除分配 std::vector 对象的方法

c++ - 隐藏私有(private)数据成员? (C++)

javascript - 如何在Reactjs中找到所有带有类的DOM元素?

java - 获取指向对象的所有引用变量

javascript - var flashElements = document.getElementsByTagName ("EMBED"的最佳替代品;

c++ - 非静态/静态/全局/子类成员的初始化顺序

c++ - 为什么 emplace 采用迭代器而不是 const_iterator?

python - 如何整理参数功能以从枚举创建一组值?

c++ - (继承类)c++ 不存在默认构造函数