我想用我的类和std :: vector做一些工作。我folloing问题遇到=在C++类中使用指针成员
这里是我的代码:
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 !!!
}
正如你可以在代码中看到,vec
在vector<int>* A::ret_vec()
被声明为一个局部变量,当我把它assgin在指针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
,时间表现是我当前的优先考虑。因此恐怕按值返回向量不是一个选项。
按值返回向量。您的编译器可能会使用移动指派操作符。 – Jiwan
@Jiwan在这里不需要值语义。 – juanchopanza
你很幸运,它在第一种情况下返回了'0',可能会发生更糟的情况。 –