-1

我正在尝试对我的班级和 std::vector 做一些工作。我遇到了以下问题,=

这是我的代码:

class A
{
    private:
        ........
    public:
        vector<int>* ret_vec();
};

vector<int>* A::ret_vec()
{
    vector<int> vec;         // vec is declared as a local variable
    ......
    return &vec;
}

int main()
{
    .....
    vector<int>* vec = A.ret_vec();       // size of vec is 0 !!!
}

正如你在代码中看到的,vecinvector<int>* A::ret_vec()被声明为一个局部变量,当我将它分配给一个指针 in 时main,它的大小vec是 0。

因此,我改用以下方法:

class A
{
    private:
        vector<int> vec;         // vec is declared as a member variable
    public:
        vector<int>* ret_vec();
};

vector<int>* A::ret_vec()
{
    ......
    return &vec;
}

int main()
{
    .....
    vector<int>* vec = A.ret_vec();       // size of vec is ok
}

现在,当我声明vec为成员变量时,当我将它分配给 in 的本地指针时main,它的大小完全符合我的预期。

我可以知道这是为什么吗?非常感谢。

==================================================== ======== 编辑:

对不起,我一开始没有清楚地解释自己。我正在处理一个大型数据集vec,时间性能是我当前的首要任务。因此,恐怕按值返回向量不是一种选择。

4

2 回答 2

7

您返回一个悬空指针并遇到未定义的行为。返回指向本地自动变量的指针是不合法的。

于 2013-08-27T09:34:38.183 回答
0

您返回一个指向局部变量的指针,该变量将在函数调用后被删除。所以返回指针不是一个好习惯。只需返回对象。

于 2013-08-27T09:54:59.497 回答