数组元素的本地副本

Kef*_*fir 2 c++ arrays

为了使我的代码更具可读性,我在函数内部有一个局部变量,它接受一个数组中的指定元素,如下所示:

Element* elements = new Element[10];

void doSomething(int index) {
    Element element = elements[index];
    // do things with that element
}
Run Code Online (Sandbox Code Playgroud)

这里发生了什么:元素是元素[index]的独立副本,在函数结束时被销毁?从我测试的内容来看,似乎是因为元素的变化不会影响元素[index],但是,我想知道幕后发生了什么.元素的赋值是否调用隐式复制构造函数?

Mik*_*our 7

是的,这正是发生的事情(虽然这是初始化,而不是任务).

你已经声明Element是一个对象,所以它是一个独立的对象Element.它是通过复制其初始化来初始化的elements[index].如果你还没有使用复制构造函数,那么它会使用隐式复制构造函数,复制每个成员.

如果你想修改数组中的元素,那么你需要一个引用:

Element & element = elements[index];
        ^
Run Code Online (Sandbox Code Playgroud)