2013-08-27 67 views
-1

我想用我的类和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 !!! 
} 

正如你可以在代码中看到,vecvector<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,时间表现是我当前的优先考虑。因此恐怕按值返回向量不是一个选项。

+0

按值返回向量。您的编译器可能会使用移动指派操作符。 – Jiwan

+1

@Jiwan在这里不需要值语义。 – juanchopanza

+0

你很幸运,它在第一种情况下返回了'0',可能会发生更糟的情况。 –

回答

7

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

0

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

+0

我会被销毁,不会被删除。 –