This question already has answers here:
Create shared_ptr to stack object
                                
                                    (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/

10-11 22:41
查看更多