C++ 在c++;

C++ 在c++;,c++,C++,我在一次采访中被要求在CPP中给出一个例子或场景,我们不能没有指针继续进行,这意味着我们必须使用指针。 我已经给出了一个函数返回数组大小未知的例子,然后我们需要返回指针,它是数组的名称,实际上是一个指针。但采访者说,这是一个内部数组,需要举一些其他的例子 因此,请帮助我了解一些其他相同的情况。如果您使用的C库具有返回指针的函数,那么您必须使用指针,而不是引用。如果您使用的C库具有返回指针的函数,那么您必须使用指针,不是参考资料。还有许多其他情况(例如,明确涉及内存),但我首先想到的是这两种情况:

我在一次采访中被要求在CPP中给出一个例子或场景,我们不能没有指针继续进行,这意味着我们必须使用指针。 我已经给出了一个函数返回数组大小未知的例子,然后我们需要返回指针,它是数组的名称,实际上是一个指针。但采访者说,这是一个内部数组,需要举一些其他的例子


因此,请帮助我了解一些其他相同的情况。

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

如果您使用的C库具有返回指针的函数,那么您必须使用指针,不是参考资料。

还有许多其他情况(例如,明确涉及内存),但我首先想到的是这两种情况:

链接数据结构

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

  class BinTree {
      BinTree *left, *right;
  public:
      // ...
  };
为什么没有替代方案:标准中没有通用树实现(不包括排序树)

指向实现模式的指针(pimpl)

如何:您的public
.hpp
文件具有方法,但仅通过不透明的
Whatever*
引用内部状态;您的内部实现实际上知道这意味着什么,并且可以访问它的字段。见:


没有替代方案的原因:如果您以仅二进制形式提供实现,那么头部的用户在没有反编译/反向工程的情况下无法访问内部。这是一种更为强烈的隐私形式。

还有许多其他情况(例如,明确涉及内存),但我首先想到的是这两种情况:

链接数据结构

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

  class BinTree {
      BinTree *left, *right;
  public:
      // ...
  };
为什么没有替代方案:标准中没有通用树实现(不包括排序树)

指向实现模式的指针(pimpl)

如何:您的public
.hpp
文件具有方法,但仅通过不透明的
Whatever*
引用内部状态;您的内部实现实际上知道这意味着什么,并且可以访问它的字段。见:


没有替代方案的原因:如果您以仅二进制形式提供实现,那么头部的用户在没有反编译/反向工程的情况下无法访问内部。这是一种更强的隐私形式。

指针对于性能非常重要,例如函数。最初,当您在函数中传递值时,它会复制参数中的值并存储到参数中
但在指针中,您可以间接访问它们并执行您想要的操作。指针对于性能非常重要,例如函数。最初,当您在函数中传递值时,它会复制参数中的值并存储到参数中 但在指针中,您可以间接访问它们并执行所需操作

  • 具有大生存期的对象。您在函数中创建了一些对象。之后您需要此对象(甚至不需要它的副本)。 但如果您在没有指针的情况下创建它,在堆栈上,函数完成后,这个对象将死亡。所以您需要使用动态内存创建这个对象,并返回指向它的指针

  • 堆栈空间不足。您需要一个需要大量内存的对象,因此在堆栈上分配它将不适合您的需要,因为堆栈的空间通常比堆小。因此,您需要使用堆上的动态内存再次创建对象,并返回指向该对象的指针

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

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

另外,您可以浏览更多场景,并决定在哪些情况下需要使用指针。

以下是一些情况:

  • 具有大生存期的对象。您在函数中创建了一些对象。之后您需要此对象(甚至不需要它的副本)。 但如果您在没有指针的情况下创建它,在堆栈上,函数完成后,这个对象将死亡。所以您需要使用动态内存创建这个对象,并返回指向它的指针

  • 堆栈空间不足。您需要一个需要大量内存的对象,因此在堆栈上分配它将不适合您的需要,因为堆栈的空间通常比堆小。因此,您需要使用堆上的动态内存再次创建对象,并返回指向该对象的指针

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

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


另外,您可以浏览更多场景,并决定在哪些情况下需要使用指针。

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

这在通过考试的图书馆中很常见