C++ 向量中对象的初始化

C++ 向量中对象的初始化,c++,C++,简单的是/否问题(我想)。如果我在文件范围内声明以下内容: struct SoundTouchExt { SoundTouch sTouch; int channels; int sampleRate; float tempoChange; int pitchSemi; int bytesPerSample; }; const int MAX_TRACKS = 16; vector<SoundTouchExt> sProcessor

简单的是/否问题(我想)。如果我在文件范围内声明以下内容:

struct SoundTouchExt
{
    SoundTouch sTouch;
    int channels;
    int sampleRate;
    float tempoChange;
    int pitchSemi;
    int bytesPerSample;
};

const int MAX_TRACKS = 16;

vector<SoundTouchExt> sProcessors(MAX_TRACKS);

我期望
sTouch
是一个使用默认构造函数构造的
SoundTouch
对象。是否有一个隐藏的陷阱,我可能会错过?如果需要的话,我会详细介绍。

您的期望是正确的。您有16个默认构造的
SoundTouchExt
(每个都包含一个默认构造的
SoundTouch
)实例


请注意,保留
SoundTouchExt
引用需要小心,因为以某些方式修改向量(例如,向向量中添加元素)可能会使引用无效。

只要您不向向量中添加任何元素,或执行任何可能使
sProcessor[0]无效的操作
。为什么添加元素会使sProcessors[0]无效?因为如果没有足够的空间容纳新元素,向量可能需要重新分配(即插入前如果
sProcessors.size()==sProcessors.capacity()
)。以前的元素将被复制,但它们将是不同的对象,因此对原始元素的任何引用都将无效。不保留引用,并始终调用SProcessor。在(0)处应该可以,对吗?它将永远是我期待的对象?@svenoaks:总之,是的。
SoundTouchExt& soundTouch = sProcessors.at(0);
SoundTouch& sTouch = soundTouch.sTouch;