c++ - 没有额外的实例方法和变量的对象切片

标签 c++ oop c++11 object-slicing

我想知道在类似于以下的情况下我是否不能忽略对象切片:

class Base
{
  private:
    int8_t data[128];
    // other variables

  protected:
    Base(args) : args(args) { }
    void setData(uint8_t i, int8_t d) { data[i] = d; }

  public:
    void doSomethingWithData() { ... }
}

class Derived
{
  public:
    Derived(args) : Base(args)
    {
      setData(...);
      setData(...);
    }
}

Base array[] = {
  Derived(args),
  Derived2(args)
  ..
}

Base& any = array[0];

根据我对对象切片的看法,即使 Derived 特定的复制/移动构造函数/赋值运算符丢失,这里也没有什么可丢失的,所以它可能是一个安全的操作,假设任何Derived 仅限于调用 Base 构造函数并设置一些数据。但这可能是我忽略的一个典型陷阱。

关于它的任何保证行为?

最佳答案

我不确定“我可以忽略切片”是什么意思。切片将在您的示例中发生,如果您愿意,您显然可以随意忽略它,但这不会改变程序的行为。不过,我认为您的示例没有任何特别的问题。我曾多次编写过类似的代码。

关于c++ - 没有额外的实例方法和变量的对象切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24826212/

相关文章:

C++ 数字金字塔

perl - 如何在 Perl 中取消祝福对象?

java - 一个真正捕获所有的java异常

c++ - 如何计算权重之间的中间性

javascript - javascript 中安全返回私有(private)字段

oop - Kotlin:如何将作为集合的类变量重写为子类型的集合

c++ - 为什么 C++ 不尝试使用第二个模板重载?

c++ - 具有成员 std::vector 的移动语义

c++ - std::regex_match 和 std::regex_search 之间的区别?

c++ - iostream::write() 中需要 sizeof() 吗?