为了使我的代码更具可读性,我在函数内部有一个局部变量,它接受一个数组中的指定元素,如下所示:
Element* elements = new Element[10];
void doSomething(int index) {
Element element = elements[index];
// do things with that element
}
这里发生了什么:元素是元素[index]的独立副本,在函数结束时被销毁?从我测试的内容来看,似乎是因为元素的变化不会影响元素[index],但是,我想知道幕后发生了什么。元素的赋值是否调用隐式复制构造函数?
答案 0 :(得分:7)
是的,这恰好发生了什么(虽然这是初始化,而不是作业)。
您已将Element
声明为对象,因此它是与任何其他Element
分开的对象。它是通过复制其初始化程序elements[index]
来初始化的。如果您还没有复制构造函数,那么它会使用隐式复制构造函数,复制每个成员。
如果你想修改数组中的元素,那么你需要一个引用:
Element & element = elements[index];
^
答案 1 :(得分:0)
是的,本地变量"元素"独立于全局"元素指针"。 本地价值的变化不会改变全球价值。