不确定here发生了什么:
#include <iostream>
#include <vector>
class Voice
{
public:
double mValue = 0.0;
Voice() { }
Voice(const Voice ©) {
}
};
class VoiceManager
{
public:
std::vector<Voice> mVoices;
VoiceManager() {
mVoices = std::vector<Voice>(numVoices, Voice());
for (int i = 0; i < numVoices; i++) {
mVoices[i].mValue = 100.0;
}
}
private:
int numVoices = 16;
};
int main()
{
VoiceManager voiceManager;
Voice voice = voiceManager.mVoices[2];
std::cout << voice.mValue << std::endl;
}我为每个Voice设置了mValue,值为100,运算符为[],但当我尝试使用相同的[]运算符检索对象时,似乎没有返回该元素?它打印0。
相反,如果我这样做了:
Voice &voice = voiceManager.mVoices[2];我终于可以看到更新后的值了。
这是怎么回事?
发布于 2017-02-21 21:43:41
如注释所示,您的复制构造函数a)是错误的,b)是多余的
class Voice
{
public:
double mValue = 0.0;
// don't provide default constructor, unless you have another constructor
// use compiler-generated copy-constructor
};
class VoiceManager
{
int numVoices = 16; // move up here so that member-initialization works
public:
std::vector<Voice> mVoices;
VoiceManager()
:
mVoices(numVoices) // member-initialize
{
for (int i = 0; i < numVoices; i++) {
mVoices[i].mValue = 100.0;
}
}
};
int main()
{
VoiceManager voiceManager;
Voice voice = voiceManager.mVoices[2];
std::cout << voice.mValue << std::endl;
}请注意,我还使用成员初始化语法对VoiceManager的构造函数进行了较小的清理。
至于另一个问题:初始化
Voice voice = voicemanager.mVoice[2]; 实际调用您的复制构造函数
Voice(voicemanager.mVoice[2]);(这里的=符号并不表示赋值!)
https://stackoverflow.com/questions/42368771
复制相似问题