返回指针与传递对象的引用以在C++中存储答案

use*_*855 1 c++ pointers reference

关于在这个特定场景中指针与引用的使用,我有一般性的问题.

假设我有一个函数可以进行一些计算并将值存储在一个对象中供以后调用者使用.我可以通过使用指针或引用来实现它.

虽然,我更喜欢使用引用,因为我尽可能地避免使用指针,是否有一种方法的优点/缺点.

使用指针的代码如下:

Node*& computeNode() {  
  // Do some computation before creating a node object.  
  Node* newNode = new Node;  
  newNode->member1 = xyz;  
  newNode->member2 = abc;  
  // and so on ...  
  return newNode;  
}
Run Code Online (Sandbox Code Playgroud)

使用引用的代码可以执行以下操作:

void computeNode(Node& newNode) {  
   // Do some computation before assigning values to the node object.  
   newNode.member1 = xyz;  
   newNode.member2 = abc;  
   // and so on.  
}
Run Code Online (Sandbox Code Playgroud)

我能看到的差异如下:

  1. 使用指针方法时,newNode对象在Heap上分配.因此,除非我在其上调用delete,否则它不会被删除.但是,在引用方法中,是否在堆/堆栈上分配newNode取决于调用者创建newNode对象的操作.

  2. 每当我们使用引用时,传递给函数所需的参数数量至少增加1.这很好,只是我觉得将返回对象传递给函数调用有点反直觉,除非我将函数命名为这样一种方式使API用户变得明显.

  3. 通过使用引用,我可以模拟多个对象的返回.在指针方法中,我想我必须将所有对象包装在另一个结构中(如对类)然后返回它.这增加了开销.

但是,我不知道通常一个人比另一个人更受欢迎.如果在C++中有任何函数命名约定,那么开发人员就知道他应该将返回对象也作为参数传递.

Kit*_*YMG 5

您可以尝试返回auto_ptr或shared_ptr.这将消除删除问题.