向量中的数据什么时候释放?

时间:2019-11-14 15:56:20

标签: c++ vector scope

我有以下代码

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函数调用结束后,它超出范围。那是对的吗?

2 个答案:

答案 0 :(得分:4)

  

何时将释放存储在向量中的数据?测试函数调用结束后超出范围。那是对的吗?

是的。

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

但是,您的代码中还有一个细微的问题:您按值传递了指针t,因此测试内部的赋值对t中的main无效。如果您在t中使用main,则可能会遇到段错误,这不是因为向量已经超出范围,而是因为您从未在t中初始化main

答案 1 :(得分:3)

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