在C++类中使用指针成员

Cha*_*ame -1 c++ pointers vector

我正在尝试用我的类和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 !!!
}
Run Code Online (Sandbox Code Playgroud)

正如您在代码中看到的那样,vecin vector<int>* A::ret_vec()被声明为局部变量,当我将其指定为指针时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
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

对不起,我没有在第一时间解释清楚.我正在处理大型数据集vec,时间性能是我当前的优先事项.因此,我担心按值返回向量不是一个选项.

Luc*_*ore 7

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