我是一个全新的C++ (和堆栈溢出!)因此,如果这个问题已经在某种程度上得到了回答,我很抱歉,我只是无法找到我正在寻找的东西。
在最近的一个项目中,我创建了指向指针的指针(例如: Tiger **tigerArray;),结果在我的程序中出现了内存泄漏,但我始终无法找出原因。我有一个想法,如果我做的是智能指针,而不仅仅是指针,也许问题就解决了?
所以我很好奇,如果我能创建一个指向指针的指针,我能创建一个指向智能指针的智能指针吗?
**抱歉,我应该更新,我不允许使用向量进行此赋值,我们必须使用数组
发布于 2018-10-23 03:36:38
智能点是通用的;你基本上可以在其中粘贴任何你想要的东西。但是你应该根据你想要实现的目标来决定合适的工具。智能指针有相当具体的用例。另一方面,指向指针的指针有几种不同的用例:
M
xN
.std::vector<std::vector<T>>
或者std::array<std::array<T, N>, M>
,就像用来修改函数的另一个指针一样。在这种情况下,您应该考虑通过引用传递。如果代码中确实需要指针,可以通过将指向T
的指针的引用作为T*&
传递来进行修改。但是,根据您表示的内容,您也可以像传递std::vector<T>&
一样传递数据。智能指针的存在是为了自动管理对象的生命周期,这取决于您希望如何使用这些对象。它们不是纯粹作为一种间接的方式存在的,它对许多不同的用法都是开放的,比如原始指针。关于使用哪种工具,我的建议如下:
如果你需要一个简单的可调整大小的数组,使用std::vector<T>
.
std::vector<std::vector<T>>
.
N
元素,考虑使用std::array<T, N>
.
std::set
,std::map
,std::multimap
,std::queue
,D31,等等H232F233关于智能指针:
如果你需要一个轻量级的对象来传递,但只有一个所有者,或者如果你需要封装一个在一个地方使用的多态对象,考虑std::unique_ptr<T>
std::shared_ptr<T>
T&
const T&
编辑:
在看到你的作业不允许使用std::vector
之后,我意识到我并没有真正回答你更新的问题。但我仍然希望给你(和未来的读者)一些关于智能指针是用来做什么,它们不是用来做什么的一些洞察力。
如果你的讲师正在教授C++,但不允许你使用vector
,我会批评他们说,vector
是现代C++开发人员的一个极其重要的工具,它的使用比许多过时的课程中仍然作为C++教授的C风格的替代品简单得多,也更安全。其他工具和技术也是如此,比如避免使用指针,避免使用new
和delete
,以及很好地利用标准库的容器和算法,所有这些都可以帮助您编写更干净、更正确和高效的代码。
https://stackoverflow.com/questions/52936218
复制相似问题