2011-08-06 31 views
0

我需要确定方法处理哪些属性(字符串)。所以,我设计了我的方法如下。传递向量指针作为方法的输入

void method1(std::vector<String> * myVector) 
{ 
    myVector = new std::vector<String>(); 
    //do something; 
    myVector->push_things; 
} 

因此,我会像这样从topMethod()调用method1。

topMethod() 
{ 
    std::vector<String> * aVector = 0; 
    method1(aVector); 
    //process aVector to identify its contents; 
} 

现在,方法1()中的矢量myVector正在填充正常。但是它的内容无法用调用方法,即topMethod()。我不确定他们如何获得释放。我觉得我正在分配使用新的,所以他们应该在呼叫之后在呼叫者的位置理想..

请提供您的想法什么是错的。

回答

0

您应该将参考指针传递给向量。
您正在分配给您传递的向量的指针的副本,而不是您传递的指针。

void method1(std::vector<int>* & myVector) 

这应该解决它。

+0

“你正在分配一个指向你向量的指针的副本,而不是你传递的指针。” 因此,如果我在topMethod中创建了一个新的向量,然后将地址分配给包含指针的地址,那么它应该工作吗? method1(* vectorPTR) { vector newVector; vectorPTR =&newVector; } – Pavan

+0

复制发生的原因是您使用'按值传递'而不是'通过引用',否则它不会工作.'vectorPTR'不是您传递的指针,而是它的副本。 –

3

因为你没有通过指针作为参考:

试试这个:

void method1(std::vector<int>* & myVector) 
{       // ^^^ note this! 
    myVector = new std::vector<int>(); 
    myVector->push_back(100); 
} 
//call it 
std::vector<int> *v; 
method1(v); 

或者这样:

void method1(std::vector<int> & myVector) 
{ 
    myVector.push_back(100); //myVector is not a pointer now! 
} 
//call it 
std::vector<int> v; 
method1(v); 

就个人而言,我宁愿以下几点:

std::vector<int> method1() 
{ 
    std::vector<int> myVector; 
    myVector.push_back(100); 
    return myVector; 
} 
//call it 
std::vector<int> v = method1(); 
+1

剪断第三代码肯定是最好的做法。 –

+1

现在编译器实现了命名返回值优化,因此第三个代码片段可能与第二个代码片段一样快。 –

2

除了告诉你为什么你的解决方案是错误的其他答案,我会建议如何以适当的C++方式做到这一点。 使用引用

void method1(std::vector<int>& v) 
{ 
    v.push_things; 
} 

int main() 
{ 
    std::vector<int> v; 
    method1(v); 
} 
0

如果你的方法的任务是创建一个新的载体,然后返回它:

std::vector<int>* method1()

如果您需要在返回值的额外信令,创造更多的载体,等使用此:

.. method1(std::vector<int>*& myVector, ..)

如果你的方法唯一的工作就是操作矢量:

.. method1(std::vector<int>& myVector)

相关问题