我想知道我是否不能在类似于以下情况的情况下忽略对象切片:
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
构造函数和设置一些数据。但这可能是我忽略的典型陷阱。
关于它的任何保证行为?