向量中的数据何时释放

When will the data from a vector freed?

本文关键字:何时 释放 数据 向量      更新时间:2023-10-16

我有以下代码

void test(MyDataType * t)
{
vector<MyDataType> tmp;
tmp.push_back(MyDataType(2,24));
t = tmp.data();
}
void test2()
{
MyDataType * t;
test(t);
// Do some stuff with the data pointed by t
}

存储在矢量中的数据何时释放?在test函数调用结束后,它超出了作用域。这是正确的吗?

存储在矢量中的数据何时释放?测试函数调用结束后,它超出了范围。这是正确的吗?

是正确的。

如果您要从函数返回指针,那么它将是一个悬空指针。

然而,代码中还有另一个微妙的问题:通过值传递指针t,因此测试内部的赋值不会对main中的t产生影响。如果您在main中使用t,您可能会得到segfault,这不是因为矢量已经超出范围,而是因为您从未在main中初始化t

是的,vector对象tmp的析构函数应该释放存储空间。你的程序表现出未定义的行为,或者至少如果你正确地传递了指针,它会表现出来。