2011-08-06 34 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)

相關問題