我们强制在c ++中使用指针的场景

时间:2015-07-05 11:28:50

标签: c++

我曾在接受采访时被要求在CPP中给出一个示例或场景,我们无法在没有指针的情况下继续进行,这意味着我们必须使用指针。 我给出了一个函数返回数组的例子,其大小未知,然后我们需要返回指针,该指针是实际上是指针的数组的名称。但是采访者说其内部的阵列给出了一些其他的例子。

所以请帮助我解决其他一些情况。

5 个答案:

答案 0 :(得分:2)

如果您正在使用具有返回指针的函数的C库,则必须使用指针,而不是引用。

答案 1 :(得分:2)

还有很多其他情况(例如明确处理内存) - 但首先出现在我的脑海中:

关联的数据结构

如何:您需要在多个位置引用结构的某些部分。您可以使用指针,因为容器(内部也使用指针)不能满足您的所有数据结构需求。例如,

  class BinTree {
      BinTree *left, *right;
  public:
      // ...
  };

为什么没有其他选择:标准中没有通用的树实现(不包括排序的实现)。

指向实施模式(pimpl)

如何:您的公共.hpp文件具有方法,但仅通过不透明Whatever *引用内部状态;并且您的内部实现实际上知道这意味着什么并且可以访问其字段。看到: Is the pImpl idiom really used in practice?

为什么没有其他选择:如果您以二进制形式提供实现,则标头的用户无法在不进行反编译/逆向工程的情况下访问内部。这是一种更强大的隐私形式。

答案 2 :(得分:2)

您想要使用引用的任何地方,但必须允许null

这在库中很常见,如果传递非零指针,它将被设置为值

将函数的参数更改为使用指针,而不是引用强调值可以更改为用户也是一种约定。

答案 3 :(得分:1)

以下是一些案例:

  • 具有较长生命周期的对象。你在函数中创建了一些对象。之后你需要这个对象(甚至不是它的副本)。 但是如果你在没有指针的情况下创建它,在堆栈上 - 在函数完成之后,这个对象就会死掉。因此,您需要使用动态内存创建此对象并返回指向它的指针。

  • 堆叠空间不够。您需要需要大量内存的对象,因此在堆栈上分配它不符合您的需求,因为堆栈通常比堆空间少。因此,您需要使用堆上的动态内存再次创建对象并返回指向它的指针。

  • 您需要引用语义。你有传递给某个函数的结构,你希望函数修改这个结构,在这种情况下你需要传递一个指向这个结构的指针,否则你不能修改原始结构,因为它的副本将是如果你不使用指针,则传递给函数。

注意:在后一种情况下,确实不需要使用指针,因为您可以使用引用替换它。

PS。您可以浏览here以了解更多场景,并确定哪些情况下需要使用指针。

答案 4 :(得分:0)

指针对性能非常重要,这是针对函数的。最初在函数中传递值时,它会复制参数中的值并存储到参数中 但是在指针中你可以间接访问它们并做你想做的事情