我可以制作一个指向智能指针的智能指针吗? 我对C++是全新的(堆栈溢出)!所以我道歉如果这个问题已经被某种程度的回答了,我就是无法准确地找到我想要的。

我可以制作一个指向智能指针的智能指针吗? 我对C++是全新的(堆栈溢出)!所以我道歉如果这个问题已经被某种程度的回答了,我就是无法准确地找到我想要的。,c++,pointers,smart-pointers,C++,Pointers,Smart Pointers,在最近的一个项目中,我创建了指向指针的指针(例如:Tiger**Tigerray;)并最终导致程序内存泄漏,但我始终无法找出原因。我有一个想法,也许如果我做了智能指针而不是仅仅指针,这可能解决了问题 所以我很好奇,如果我能创建一个指向指针的指针,我能创建一个指向智能指针的智能指针吗 **很抱歉,我应该更新,我不允许在此作业中使用向量,我们必须使用数组智能点是通用的;基本上你可以把任何你想要的东西都粘在里面。但是你应该根据你想要达到的目标来决定适合这份工作的工具。智能指针有相当具体的用例。另一方面

在最近的一个项目中,我创建了指向指针的指针(例如:Tiger**Tigerray;)并最终导致程序内存泄漏,但我始终无法找出原因。我有一个想法,也许如果我做了智能指针而不是仅仅指针,这可能解决了问题

所以我很好奇,如果我能创建一个指向指针的指针,我能创建一个指向智能指针的智能指针吗


**很抱歉,我应该更新,我不允许在此作业中使用向量,我们必须使用数组

智能点是通用的;基本上你可以把任何你想要的东西都粘在里面。但是你应该根据你想要达到的目标来决定适合这份工作的工具。智能指针有相当具体的用例。另一方面,指向指针的指针有两个不同的用例:

  • 指针数组的指针数组,用于实现2D数组。如果这是你想要达到的,考虑使用<代码> STD::vector < /COD>或<代码> STD::数组< /Cord> >如果你知道你的数组总是有大小<代码> M< /代码> X代码> N< /代码> .< /P>
  • 指向指针的指针,用于修改函数中的另一个指针。在这种情况下,您应该考虑通过引用。如果代码中确实需要指针,可以通过传递
    T*&
    来修改指针,这是对
    T
    指针的引用。但是,根据您所表示的内容,您可以传递数据,例如
    std::vector&

智能指针的存在是为了自动管理对象的生存期,具体取决于您希望如何使用这些对象。它们并不是纯粹作为一种间接手段存在的,这种间接手段有很多不同的用途,比如原始指针。我对使用哪种工具的建议如下:

  • 如果需要一个简单的可调整大小的
    T
    数组,请使用
    std::vector
  • 如果需要一个二维可调整大小的数组
    T
    ,请使用
    std::vector
  • <> LI>如果您知道您的数组中总是有<代码> n>代码>元素,请考虑使用<代码> STD::数组< /COD> .< 如果您需要更多的结构,如严格的排序或关系,请考虑使用<代码> STD::代码> STD::MAP>代码>,代码> STD::MultIMAP ,<代码> STD::队列,<代码> STD::堆栈等/
关于智能指针:

  • 如果您需要一个轻量级的对象来传递,但只有一个拥有者,或者如果您需要封装一个在单个地方使用的多态对象,请考虑<代码> STD::UnQuyJPTR < /C> < /LI>
  • 如果您需要一个对象由代码中的多个位置使用,而这些位置没有一个合理的所有权位置,而是需要具有分布式所有权,请使用
    std::shared\u ptr
  • 如果您想从函数内部修改对象,使对象在函数需要的时间内保持有效,只需通过引用传递:
    T&
  • 如果要从函数中读取但不修改某个对象,而该对象将在函数需要期间处于活动状态,请通过引用传递到const:
    const T&
编辑:

在看到你的作业不允许使用
std::vector
之后,我意识到我并没有真正回答你更新的问题。但我仍然希望给你们(以及未来的读者)一些关于智能指针的用途和不用途的见解


<>如果你的老师正在教C++,但不允许你使用<代码>向量< /C> >,我会批评他们:向量是现代C++开发者的一个非常重要的工具。它的使用远比C型的替代方案更为简单和安全,在许多过时的课程中,这些方法仍然被认为是C++。其他工具和技术也是如此,例如一般避免使用指针、避免使用
新建
删除
,以及充分利用标准库的容器和算法,所有这些都有助于编写更干净、更正确的,高效的代码。

你可以,但听起来你真正想要的是一个
std::vector
你试过了吗?怎么搞的?请阅读。如果您想要
Tiger**tigerArray
表示2D数组,那么指向智能指针的智能指针可能不是您想要的,但可能是
std::vector
替代?如果您不能使用向量,我怀疑他们会允许您使用智能指针。你应该写你自己的向量类(你不需要向量给你所有的提示),然后你就可以用它来代替了。@CoryKramer道歉,这一切都是新的,所以当搜索“智能指针到智能指针”时,我得到了很多关于智能指针本身的答案(它们是什么,使用一个指向函数等),但不一定要将一个问题指向另一个问题-如果这个问题看起来不合适,我将删除它-问题可能只是我对它们的了解不够/C++总体上认识到答案可能已经在其中一个问题中。这是一个很好的答案,谢谢。我理解的是,聪明的指针与向量一起使用,实际上没有“智能指针到智能指针”这样的应用程序@eckmo没错。
vector
用于需要数组的时候,智能指针用于解决棘手的所有权问题。根据需要,您可以自由创建智能指针向量或指向向量或其他类似组合的智能指针。