为什么将局部变量推回到 Vectorworks

Why Does Pushing Back Local Variable to Vector Works

C++ 向量存储指向它存储的值的指针(即整数向量将存储指向整数的指针)。在下面的代码中, int i 是 for 循环中的局部变量。 for 循环完成后,应该从内存中删除 int i 变量。因此,矢量指针应该指向内存中的某个垃圾位置。

我将此代码插入 XCode,但它打印出“30313233”——本应从内存中删除的整数。

为什么会这样?

int main(int argc, const char * argv[]) {
std::vector<int> vec;
for(int i = 30; i < 34; i++)
{
    vec.push_back(i);
}
cout << vec[0];
cout << vec[1];
cout << vec[2];
cout << vec[3];

}

The C++ vector stores pointers to the values it stores

不,那不是真的。 C++ 中的对象是真正的对象,它们不是像 Java.1

中那样的隐藏引用
int a = 1;
int b = a;
a = 3;
assert(b == 1); // b is a distinct object

在您的示例中,您正在向后推 i。这意味着对象的 copy 将被添加到向量中,而不是变量本身。


1:从技术上讲,它确实存储了一个指针,但该指针是指数组所在的内存块,实际存储的是int .但这是您(此时)不应该担心的实现细节。

向量存储指向存储对象的内存块的指针,而不是单个对象。当你插入一个向量时,对象被复制到那个内存块中。

vector<int> 存储类型 int 的值。 vector<int*> 存储 int* 类型的值,即指向 int.

的指针