This question already has answers here:
Create shared_ptr to stack object
(6个答案)
3天前关闭。
我知道这是一个很常见的问题,但是我不理解相关问题的代码示例(太费时了,太复杂了)。因此,这里是我的简单代码段:
现在,这段简短的代码片段会造成内存泄漏。我认为这是由于在破坏shared_ptr之前破坏了向量造成的。但是,我不明白如何相应地破坏指针。仅仅尝试reset()是行不通的,那我该怎么办,为什么会发生内存泄漏?
请不要问我为什么需要这样做,我是智能指针的新手,正在尝试了解如何使用它们。此示例与我的工作无关,但是,我希望避免将来出现内存泄漏,因此此问题可能会有所帮助。提前致谢!
(6个答案)
3天前关闭。
我知道这是一个很常见的问题,但是我不理解相关问题的代码示例(太费时了,太复杂了)。因此,这里是我的简单代码段:
#include <iostream>
#include <memory>
#include <vector>
using namespace std;
int main(){
vector<int> v({1,2,3,4,5});
shared_ptr<vector<int>> v_ptr(&v);
cout << (*v_ptr)[2] << endl;
}
现在,这段简短的代码片段会造成内存泄漏。我认为这是由于在破坏shared_ptr之前破坏了向量造成的。但是,我不明白如何相应地破坏指针。仅仅尝试reset()是行不通的,那我该怎么办,为什么会发生内存泄漏?
请不要问我为什么需要这样做,我是智能指针的新手,正在尝试了解如何使用它们。此示例与我的工作无关,但是,我希望避免将来出现内存泄漏,因此此问题可能会有所帮助。提前致谢!
最佳答案
因为当对象没有更多引用时,shared_ptr
会调用delete
(除非您使用删除器使它执行其他操作),因此它仅应与通过new
(或make_shared
)分配的对象一起使用。调用new
)。v
未分配给new
,因此不应将其与shared_ptr
一起使用。
关于c++ - 在C++中使用shared_ptr出现双重免费错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59354966/