我想知道在类似于以下的情况下我是否不能忽略对象切片:
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/