gpt4 book ai didi

c++ - 在 C++ 中,对象 vector 是在堆上分配还是在堆栈上分配?

转载 作者:行者123 更新时间:2023-11-28 01:14:21 25 4
gpt4 key购买 nike

我已经看到很多关于这个主题的类似问题,但我没有看到这个问题的明确答案。考虑以下代码:

typedef struct Student
{
int id;
} Student;

vector<Student> students();
for( int i = 0; i < 10; i++ )
{
Student s();
s.id = i
students.push_back( s );
}

这个 vector 是如何分配内存的?据我了解,每个 Student s应该在堆栈上有它的内存,并在循环迭代时取消分配,所以如果我稍后尝试访问此数据,这应该会产生未定义的行为。但如果我对 vector<int> 做了同样的事情它不会产生未定义的行为。

这是正确的吗?无论哪种方式,我的目标是创建一个 vector<Student>其中对象分配在堆上,而不必使用 vector<Student*> .这可能吗?

最佳答案

创建 std::unique_ptr<Student> ...也使用 std::vector<std::unique_ptr<Student>>类型来保存数据。这样您就不必担心通过 unique_ptr 删除堆存储上分配的内存。

关于c++ - 在 C++ 中,对象 vector 是在堆上分配还是在堆栈上分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59190664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com