c++ - 在 C++ 中使用 shared_ptr 的双重释放错误

标签 c++ shared-ptr

<分区>

我知道这是一个很常见的问题,但我不理解相关问题中的代码示例(太长,太复杂)。所以,这是我的简单代码片段:

#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 之前破坏了 vector 造成的。但是,我不明白如何相应地销毁指针。简单地尝试 reset() 是行不通的,那么我该怎么办,为什么会出现内存泄漏?

请不要问我为什么需要这个,我是智能指针的新手并试图了解如何使用它们。这个例子独立于我的工作,但是,我想在将来避免内存泄漏,所以这个问题实际上可能有帮助。提前致谢!

最佳答案

因为 shared_ptr 在对象没有更多引用时调用 delete (除非你使用删除器让它做其他事情),它应该只与使用 new(或 make_shared,调用 new)分配的对象。

v 未分配给 new,因此您不应将其与 shared_ptr 一起使用。

关于c++ - 在 C++ 中使用 shared_ptr 的双重释放错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59354966/

相关文章:

c++ - 在 Visual Studio 2010 C++ 项目中使用 MinGW 构建的 dll

c++ - 设置和重置部分位图

c++ - 在 C++ 中更轻松地使用共享指针的方法

C++ 模板 - 如何跨多个 MTU 使用

c++ - 指向静态常量对象的共享指针?

c++ - 为什么 typeid.name() 使用 GCC 返回奇怪的字符以及如何使它打印未损坏的名称?

c++ - Qt 5.1 应用程序无法在 QtCreator 之外的 Windows 8 上运行,运行时错误

c++ - std::tr1 中的 shared_ptr

c++ - 控制帧率

c++ - 对类成员使用智能指针