首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我可以让智能指针指向智能指针吗?

我可以让智能指针指向智能指针吗?
EN

Stack Overflow用户
提问于 2018-10-23 03:08:35
回答 1查看 196关注 0票数 -1

我是一个全新的C++ (和堆栈溢出!)因此,如果这个问题已经在某种程度上得到了回答,我很抱歉,我只是无法找到我正在寻找的东西。

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

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

**抱歉,我应该更新,我不允许使用向量进行此赋值,我们必须使用数组

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-23 03:36:38

智能点是通用的;你基本上可以在其中粘贴任何你想要的东西。但是你应该根据你想要实现的目标来决定合适的工具。智能指针有相当具体的用例。另一方面,指向指针的指针有几种不同的用例:

  • 指针数组的指针数组,用于实现2D数组。如果这就是你想要实现的,如果你知道你的数组总是有一个指针的MxN.
  • pointer大小,那么考虑使用std::vector<std::vector<T>>或者std::array<std::array<T, N>, M>,就像用来修改函数的另一个指针一样。在这种情况下,您应该考虑通过引用传递。如果代码中确实需要指针,可以通过将指向T的指针的引用作为T*&传递来进行修改。但是,根据您表示的内容,您也可以像传递std::vector<T>&一样传递数据。

智能指针的存在是为了自动管理对象的生命周期,这取决于您希望如何使用这些对象。它们不是纯粹作为一种间接的方式存在的,它对许多不同的用法都是开放的,比如原始指针。关于使用哪种工具,我的建议如下:

如果你需要一个简单的可调整大小的数组,使用std::vector<T>.

  • If你需要一个可调整大小的二维数组,使用std::vector<std::vector<T>>.

  • If你知道你的数组中总是有N元素,考虑使用std::array<T, N>.

  • If你需要更多的结构,例如严格的排序或关系,考虑使用std::setstd::mapstd::multimapstd::queue,D31,等等H232F233

关于智能指针:

如果你需要一个轻量级的对象来传递,但只有一个所有者,或者如果你需要封装一个在一个地方使用的多态对象,考虑std::unique_ptr<T>

  • If你需要一个对象在代码中被多个地方使用,它没有一个合理的所有权位置,而是需要具有分布式所有权,使用std::shared_ptr<T>

  • If你想从一个函数内部修改一个对象,以便该对象在函数需要的持续时间内一直存在,
  • 。只需通过引用传递:要读取但不修改函数中对象,且该对象在函数需要的持续时间内处于活动状态的T&
  • If,通过引用传递给const:const T&

编辑:

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

如果你的讲师正在教授C++,但不允许你使用vector,我会批评他们说,vector是现代C++开发人员的一个极其重要的工具,它的使用比许多过时的课程中仍然作为C++教授的C风格的替代品简单得多,也更安全。其他工具和技术也是如此,比如避免使用指针,避免使用newdelete,以及很好地利用标准库的容器和算法,所有这些都可以帮助您编写更干净、更正确和高效的代码。

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

https://stackoverflow.com/questions/52936218

复制
相关文章

相似问题

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