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

Using pointer member in C++ class

本文关键字:指针 成员 C++      更新时间:2023-10-16

我正在尝试用我的类和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 !!!
}

正如您在代码中看到的,vector<int>* A::ret_vec()中的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
}

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

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

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

很抱歉,我一开始没有把自己解释清楚。我正在处理一个大型数据集vec,时间性能是我当前的首要任务。因此,我担心按值返回向量不是一个选项。

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

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