首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该总是处理引用返回的向量吗?

我应该总是处理引用返回的向量吗?
EN

Stack Overflow用户
提问于 2017-02-21 21:34:16
回答 1查看 73关注 0票数 0

不确定here发生了什么:

代码语言:javascript
复制
#include <iostream>
#include <vector>

class Voice
{
public:
    double mValue = 0.0;

    Voice() { }
    Voice(const Voice &copy) {
    }    
};

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。

相反,如果我这样做了:

代码语言:javascript
复制
Voice &voice = voiceManager.mVoices[2];

我终于可以看到更新后的值了。

这是怎么回事?

EN

回答 1

Stack Overflow用户

发布于 2017-02-21 21:43:41

如注释所示,您的复制构造函数a)是错误的,b)是多余的

代码语言:javascript
复制
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的构造函数进行了较小的清理。

至于另一个问题:初始化

代码语言:javascript
复制
Voice voice = voicemanager.mVoice[2]; 

实际调用您的复制构造函数

代码语言:javascript
复制
Voice(voicemanager.mVoice[2]);

(这里的=符号并不表示赋值!)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42368771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档