为什么即使超出范围,存储在 C++ STL 向量中的堆栈分配元素仍然存在?
Why are stack-allocated elements stored in C++ STL vector still alive even if out of scope?
我有以下代码:
#include <vector>
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
vector<int > vi;
for(int i=0; i<10; i++) {
int j=i*i;
vi.push_back(j);
}
for(int i=0; i<(int)vi.size(); i++)
cout<<vi[i]<<" ";
cout<<endl;
return 1;
}
执行这段代码returns“0 1 4 9 16 25 36 49 64 81”,但这对我来说并不直观。
据我所知,当变量在堆栈上分配时,变量在超出范围时会被取消分配。我也知道 C++ STL 向量存储指向变量的指针。为什么尽管整数已分配到堆栈并超出范围,但向量仍保留有效整数?向量持有的指针不应该因为整数被取消分配而被清空吗?
I also know that C++ STL vectors store pointers to variables.
不,标准容器存储值。 std::vector
包含指向动态分配的内部值数组的指针(在您的例子中,int
)。
你的 ints
被复制到向量中,这就是它起作用的原因(没有值语义,容器在许多情况下将无法使用)
我有以下代码:
#include <vector>
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
vector<int > vi;
for(int i=0; i<10; i++) {
int j=i*i;
vi.push_back(j);
}
for(int i=0; i<(int)vi.size(); i++)
cout<<vi[i]<<" ";
cout<<endl;
return 1;
}
执行这段代码returns“0 1 4 9 16 25 36 49 64 81”,但这对我来说并不直观。
据我所知,当变量在堆栈上分配时,变量在超出范围时会被取消分配。我也知道 C++ STL 向量存储指向变量的指针。为什么尽管整数已分配到堆栈并超出范围,但向量仍保留有效整数?向量持有的指针不应该因为整数被取消分配而被清空吗?
I also know that C++ STL vectors store pointers to variables.
不,标准容器存储值。 std::vector
包含指向动态分配的内部值数组的指针(在您的例子中,int
)。
你的 ints
被复制到向量中,这就是它起作用的原因(没有值语义,容器在许多情况下将无法使用)