【问题标题】:Copy assignment operator for derived class派生类的复制赋值运算符
【发布时间】:2017-05-30 13:38:11
【问题描述】:

我有一个从 A 派生的 B 类。A 实现了复制构造函数和赋值运算符。我有 B 的复制构造函数并想为 B 实现赋值。我的方法(很可能不正确)是

B& B::operator=(const B& other) {
    B tmp (other);
    std::swap <A>(*this, tmp);
    std::swap (m_member, other.m_member);
}

这样的东西可以吗?我在网上查看了 std::swap 到基础类的专业化,但没有找到有用的东西。

【问题讨论】:

  • 请让您的标题描述问题,而不仅仅是列出技术
  • 它仍然只是命名一个事物,而不是提出或描述一个问题

标签: c++


【解决方案1】:

您可以查看此 stackoverflow 线程 (calling operators of base class... safe?),了解如何使用基类中的 operator =。

我不明白你为什么要使用交换。你应该这样做:

B& B::operator=(const B& other) {
    A::operator = (other);
    this->m_member = other.m_member;
    return *this;
}

【讨论】:

  • M_member 可以动态分配。我使用复制构造函数来分配新内存,然后我尝试仅交换以便 tmp 的析构函数正确释放内存。
  • 如果您使用 C++ 11,请尝试使用 std::unique_ptr 或 std::shared_ptr。查看此页面,其中包含有关 unique 和 shared_ptr 的视频:youtube.com/playlist?list=PL5jc9xFGsL8FWtnZBeTqZBbniyw0uHyaH 另一种解决方案是创建一个私有/受保护的方法来动态分配内存并从构造函数和运算符调用它=
猜你喜欢
  • 1970-01-01
  • 2012-02-12
  • 2015-08-29
  • 2016-01-28
  • 2020-02-16
  • 2014-05-16
  • 2021-07-31
相关资源
最近更新 更多