【发布时间】:2017-02-21 13:34:15
【问题描述】:
不确定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];
我终于可以看到更新的值了。
这里发生了什么?
【问题讨论】:
-
Voice::Voice(Voice const&)是做什么的? -
你的复制构造函数做错了;我怀疑修复它会解决你的问题。您可以省略它并回退到隐式生成的那个;或者
mValue = copy.mValue; -
您的复制构造函数实际上并没有制作副本。只需摆脱它并使用编译器提供的那个。