gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:48:09 24 4
gpt4 key购买 nike

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

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com