C ++ Pass by value / reference

时间:2010-02-11 15:09:15

标签: c++

我有以下代码段:

vector<DEMData>* dems = new vector<DEMData>();
ConsumeXMLFile(dems);

if(!udp_open(2500))
{

}        

我希望ConsumeXMLFile方法使用通过读取XML文件构建的DEMData对象填充向量。当ConsumeXMLFile返回时,dems向量为空。我想我正在遇到价值问题。

2 个答案:

答案 0 :(得分:3)

通过这看起来,ConsumeXMLFile采用了一个指向向量的指针,所以我怀疑这是一个值传递问题。

答案 1 :(得分:1)

您是否在任何时候重新分配传递给函数的指针?换句话说,你的功能看起来像这样:

void ConsumeXMLFile(vector<DEMData>* dems) 
{
   // ... some code ...

   dems = new vector<DEMData>();

   // ...more code...
}

这是一个常见的错误,我看到C ++程序员(和C程序员)的开始。这里发生的是指向dems向量的指针正在通过值传递,这意味着如果修改指向向量,则会影响调用者拥有的向量。但是,如果修改指针(由 value 传递),则不会影响调用者拥有的指针。在重新赋值之后,ConsumeXMLFile中的dems指针将指向与调用者持有的dems指针完全不同的向量。

让我怀疑你可能会这样做的一件事是,这是C ++,并且没有明确的理由为什么你想要传递一个指向矢量的指针,而不是传给对象的引用。