首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++通过值/引用传递

C++通过值/引用传递
EN

Stack Overflow用户
提问于 2010-02-11 23:09:15
回答 2查看 331关注 0票数 1

我有以下代码片段:

代码语言:javascript
运行
复制
vector<DEMData>* dems = new vector<DEMData>();
ConsumeXMLFile(dems);

if(!udp_open(2500))
{

}        

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-11 23:26:19

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

代码语言:javascript
运行
复制
void ConsumeXMLFile(vector<DEMData>* dems) 
{
   // ... some code ...

   dems = new vector<DEMData>();

   // ...more code...
}

这是我看到的初学C++程序员(和C程序员)经常犯的错误。这里发生的事情是,指向dems向量的指针是通过值传递的,这意味着如果修改指向的向量,将影响调用者拥有的向量。但是,如果您修改指针(通过值传递),这将不会影响调用者拥有的指针。在重新赋值之后,ConsumeXMLFile中的dems指针将指向与调用者持有的dems指针完全不同的向量。

有一件事让我怀疑你可能会这么做,那就是这是C++,没有明确的理由让你传递一个指向向量的指针,而不是一个指向向量的引用。

票数 1
EN

Stack Overflow用户

发布于 2010-02-11 23:13:35

从外观上看,ConsumeXMLFile接受一个指向向量的指针,所以我怀疑这是一个通过值传递的问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2245330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档