gpt4 book ai didi

c++ - 为什么 C++ 在迭代容器时调用复制构造函数?

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

void ParticleGeneratorController::generate() {
for( unsigned i = 0; i < generators.size(); i++) {
ParticleGenerator generator = *generators[i];
generator.update();
}
}

好像调用了拷贝构造函数什么的,不过我没有定义。我只有一个显式默认构造函数。

https://github.com/ChrisLundquist/Waveform/blob/master/src/models/particle_generator.h

鉴于我上面的代码,测试失败。 https://github.com/ChrisLundquist/Waveform/blob/master/spec/controllers/particle_generator_controller_spec.cpp#L21

写成

void ParticleGeneratorController::generate() {
for( unsigned i = 0; i < generators.size(); i++) {
generators[i]->update();
}
}

测试通过。

为什么第一个实现调用的是拷贝构造函数?编译器是如何生成的?

最佳答案

这一行导致复制:

ParticleGenerator generator = *generators[i];

如果没有显式指定复制构造函数(或赋值运算符),编译器会自动生成一个。如果您希望防止复制对象,您可以将复制构造函数和赋值运算符声明而不是定义为 private:

ParticleGenerator
{
public:

private:
ParticleGenerator(const ParticleGenerator&);
ParticleGenerator& operator=(const ParticleGenerator&);
};

关于c++ - 为什么 C++ 在迭代容器时调用复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12088215/

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