次のような状況では、オブジェクトのスライスを無視できないのではないかと考えていました。
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
それについて保証された動作はありますか?