我是一个全新的C++ (和堆栈溢出!)因此,如果这个问题已经在某种程度上得到了回答,我很抱歉,我只是无法找到我正在寻找的东西。
在最近的一个项目中,我创建了指向指针的指针(例如: Tiger **tigerArray;),结果在我的程序中出现了内存泄漏,但我始终无法找出原因。我有一个想法,如果我做的是智能指针,而不仅仅是指针,也许问题就解决了?
所以我很好奇,如果我能创建一个指向指针的指针,我能创建一个指向智能指针的智能指针吗?
**抱歉,我应该更新,我不允许使用向量进行此赋值,我们必须使用数组
发布于 2018-10-23 03:36:38
智能点是通用的;你基本上可以在其中粘贴任何你想要的东西。但是你应该根据你想要实现的目标来决定合适的工具。智能指针有相当具体的用例。另一方面,指向指针的指针有几种不同的用例:
MxN.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
复制相似问题