Ena*_*ane 0 c++ copy-constructor
void ParticleGeneratorController::generate() {
for( unsigned i = 0; i < generators.size(); i++) {
ParticleGenerator generator = *generators[i];
generator.update();
}
}
Run Code Online (Sandbox Code Playgroud)
似乎调用了复制构造函数或其他东西,但我没有定义一个.我只有一个显式的默认构造函数.
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();
}
}
Run Code Online (Sandbox Code Playgroud)
测试通过.
为什么在第一个实现中调用了复制构造函数?它是如何由编译器生成的?
这一行导致副本:
ParticleGenerator generator = *generators[i];
Run Code Online (Sandbox Code Playgroud)
如果未显式指定复制构造函数(或赋值运算符),则编译器会自动生成一个.如果您希望阻止复制对象,您可以声明复制构造函数和赋值运算符,而不是将其定义为private
:
ParticleGenerator
{
public:
private:
ParticleGenerator(const ParticleGenerator&);
ParticleGenerator& operator=(const ParticleGenerator&);
};
Run Code Online (Sandbox Code Playgroud)
ParticleGenerator
每次执行此操作时,您都在创建一个新的:
ParticleGenerator generator = *generators[i];
Run Code Online (Sandbox Code Playgroud)
这是一个复制初始化,并且,如果您没有显式提供复制构造函数,则使用编译器合成的构造函数.